Russian Qt Forum

Qt => Работа с сетью => Тема начата: RedDog от Октябрь 11, 2010, 09:41



Название: QWebView переход по ссылке через JS
Отправлено: 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);
}
не переходит.
Что не так?


Название: Re: QWebView переход по ссылке через JS
Отправлено: marbius от Октябрь 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")));


Название: Re: QWebView переход по ссылке через JS
Отправлено: RedDog от Октябрь 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);
работает, кликает.