Russian Qt Forum
Ноябрь 23, 2024, 22:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWebView переход по ссылке через JS  (Прочитано 3630 раз)
RedDog
Гость
« : Октябрь 11, 2010, 09:41 »

Необходимо, что бы автоматически QWebView переходил по ссылке:
Код:
void MainWindow::onPageLoad (bool)
{
    QWebFrame *frame = m_browser->page()->mainFrame();
    QWebElementCollection collections = frame->findAllElements(":link");
    QUuid uuid = QUuid::createUuid();
    QString guid = uuid.toString().mid(1, uuid.toString().length() - 2);
    collections[10].setAttribute("id", guid);

    QString script = QString("document.getElementById('%1').click()").arg(guid);
    collections[10].evaluateJavaScript(script);
}
не переходит.
Что не так?
Записан
marbius
Гость
« Ответ #1 : Октябрь 12, 2010, 07:51 »

Доброго времени суток.

А необходимо, чтобы происходила именно эмуляция клика по ссылке или же достаточно простого перехода?

Если первое, то необходимо изменить Ваш скрипт на такой:
Код:
var e = document.createEvent('HTMLEvents');
e.initEvent('click', true, true );
document.getElementById('%1').dispatchEvent(e);

Если второе, то можно сделать так:
Код:
QWebFrame *frame = m_browser->page()->mainFrame();
QWebElementCollection collections = frame->findAllElements(":link");
m_browser->load(QUrl(collections[10].attribute("href")));
« Последнее редактирование: Октябрь 12, 2010, 08:14 от µarbius » Записан
RedDog
Гость
« Ответ #2 : Октябрь 12, 2010, 08:57 »

Ну я примерно так и сделал:
Код:
    QString script = QString("var fireOnThis = document.getElementById('%1');\
    if( document.createEvent ) {\
      var evObj = document.createEvent('MouseEvents');\
      evObj.initEvent( 'click', true, false );\
      fireOnThis.dispatchEvent(evObj);\
    } else if( document.createEventObject ) {\
      fireOnThis.fireEvent('onclick');\
    }").arg(guid);
    m_browser->page()->mainFrame()->evaluateJavaScript(script);
работает, кликает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 21.