我想在"URL更改之前"事件中添加一个侦听器,可以访问旧的URL。如果页面未重新加载(AJAX驱动的页面),则window.onbeforeunload
不会激发。
例如,当你点击右侧导航栏中的另一个视频时,这种情况就会发生在YouTube视频页面上。
我读过这篇文章,它对window.location
进行了民意调查。但这并不能捕获旧的URL。
这是一个Chrome扩展。我正在寻找一种在javascript中更改URL之前进行检测的方法。
对于使用history
API的AJAX驱动的页面(其中大多数页面,包括YouTube),您可以拼接到history.pushState
中。
对于Chrome,旧url将位于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
函数,所以必须从内容脚本中注入此代码。
如果您正在编写Chrome扩展,则可以侦听在更改选项卡url时触发的onUpdated
事件。点击此处了解更多信息https://developer.chrome.com/extensions/tabs.html#event-on已更新。