QtWebKit:如何检测通过HTML5历史API更改的URL

QtWebKit:如何检测通过HTML5历史API更改的URL,qt,qtwebkit,qwebview,Qt,Qtwebkit,Qwebview,我们目前正在使用QtWebKit构建一个应用程序,其中一部分显示我们网站的产品目录页面。在该网页上,我们使用该插件跟踪排序和过滤选项,而无需用户重新加载页面 调用jQuery.history的pushState()函数时,提供的URL会正确地推送到历史记录中,但是QWebView的urlChanged()信号(我们正在监听该信号以更新后退/前进按钮和地址栏)不会被触发,即使当前URL已更改。我只能假设这是因为没有点击任何链接,也没有重新加载页面,所以Qt认为它不需要做任何与URL相关的事情 有没

我们目前正在使用QtWebKit构建一个应用程序,其中一部分显示我们网站的产品目录页面。在该网页上,我们使用该插件跟踪排序和过滤选项,而无需用户重新加载页面

调用jQuery.history的
pushState()
函数时,提供的URL会正确地推送到历史记录中,但是
QWebView
urlChanged()
信号(我们正在监听该信号以更新后退/前进按钮和地址栏)不会被触发,即使当前URL已更改。我只能假设这是因为没有点击任何链接,也没有重新加载页面,所以Qt认为它不需要做任何与URL相关的事情

有没有办法检测通过QtWebKit中的HTML5历史API进行的URL更改,或者我是否遗漏了一些明显的内容?

有信号:

此信号在更改框架中已导航页面的历史记录之前不久发出,例如,在历史记录中导航时

您可以使用它来跟踪历史记录更改:

void MainWindow::saveFrameStateRequested(QWebFrame *frame, QWebHistoryItem *item) {
    // this slot is executed before the history is changed, 
    // so we need to wait a bit:
    QTimer::singleShot(100, this, SLOT(listHistoryItems()));
}

void MainWindow::listHistoryItems() {
    for (QWebHistoryItem historyItem: view->page()->history()->items()) {
        qDebug() << "item" << historyItem.url() << historyItem.title();
    }
}

void MainWindow::finishLoading(bool) {
    // (re)connect the signal to track history change,
    // maybe there is a better place to connect this signal
    // where disconnect won't be needed
    disconnect(view->page(), SIGNAL(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*)),
            this, SLOT(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*)));

    connect(view->page(), SIGNAL(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*)),
            this, SLOT(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*)));
}
void主窗口::saveFrameStateRequested(QWebFrame*frame,QWebHistoryItem*项){
//此插槽在更改历史记录之前执行,
//所以我们需要等一下:
QTimer::singleShot(100,this,SLOT(listHistoryItems());
}
void主窗口::listHistoryItems(){
对于(QWebHistoryItem historyItem:view->page()->history()->items()){

qDebug()AFAIR,你可以将QObject注入js并使用它的信号和插槽。在这里,我找到了它。还有。我不想对网站做任何更改以使“浏览器”正常工作,但这肯定是最后的选择。它包括javascript注入吗?我的意思是,原来的网站仍然是一样的,但“浏览器”将QoObject和连接到jquery.history的代码注入“userscripts”。那么我们将注入JS代码来检测何时推送一个新URL?这听起来似乎是可行的,但在不修改站点代码(服务器端或客户端)的情况下,是否有任何方法来检测它?