gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:59:37 25 4
gpt4 key购买 nike

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

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

有什么方法可以检测通过 QtWebKit 中的 HTML5 历史 API 所做的 URL 更改,还是我遗漏了一些明显的东西?

最佳答案

QWebPage::saveFrameStateRequested信号:

This signal is emitted shortly before the history of navigated pages in frame is changed, for example when navigating back in the history.



您可以使用它来跟踪历史更改:
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*)));
}

修改版 Fancy Browser示例 screenshot .

关于QtWebKit:如何检测通过 HTML5 历史 API 更改的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16174453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com