我想在“更改URL之前”事件中添加一个侦听器,并且可以访问旧URL。如果页面没有重新加载(AJAX驱动的页面),window.onbeforeunload
不会触发。
例如,当您点击右侧导航栏中的其他视频时,就会在YouTube视频页面上发生这种情况。
我已阅读this post,其中有window.location
个民意调查。但是这不会捕获旧的URL。
这适用于Chrome扩展程序。我正在寻找一种在javascript中更改URL之前检测的方法。
答案 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。