检测URL更改(无窗口卸载)

时间:2013-08-25 00:10:19

标签: javascript ajax url google-chrome-extension

我想在“更改URL之前”事件中添加一个侦听器,并且可以访问旧URL。如果页面没有重新加载(AJAX驱动的页面),window.onbeforeunload不会触发。

例如,当您点击右侧导航栏中的其他视频时,就会在YouTube视频页面上发生这种情况。

我已阅读this post,其中有window.location个民意调查。但是这不会捕获旧的URL。

这适用于Chrome扩展程序。我正在寻找一种在javascript中更改URL之前检测的方法。

2 个答案:

答案 0 :(得分:4)

对于使用history API(其中大多数包括YouTube)的AJAX驱动网页,您可以拼接成history.pushState

对于Chrome,旧网址将位于spf-referer属性中。 (此外,当pushState也被触发时,location.href仍将设置为旧URL。)

所以这样的代码可以工作:

var H               = window.history;
var oldPushState    = H.pushState;
H.pushState         = function (state) {
    if (typeof H.onpushstate == "function") {
        H.onpushstate ({state: state} );
    }
    return oldPushState.apply (H, arguments);
}
window.onpopstate = history.onpushstate = function (evt) {
    console.log ("Old URL: ", evt.state["spf-referer"]);
}

请注意,由于您需要覆盖目标网页的pushState功能,因此您必须从内容脚本中inject使用此代码。

答案 1 :(得分:2)

如果您正在撰写Chrome扩展程序,则可以收听更改标签网址时触发的onUpdated事件。更多信息,请https://developer.chrome.com/extensions/tabs.html#event-onUpdated