猿问
下载APP

window.location.href更改时的事件

window.location.href更改时的事件

我正在为一个网站编写Greasemonkey脚本,该脚本在某些时候会修改location.href

如何在页面上进行更改window.addEventListener时获得事件(通过或类似的东西)window.location.href?我还需要访问指向新/修改的URL的文档的DOM。

我已经看到了其他涉及超时和轮询的解决方案,但我想尽可能避免这种情况。


达令说
浏览 139回答 3
3回答

SMILET

popstate事件:当活动历史记录条目更改时,将触发popstate事件。[...] popstate事件只能通过执行浏览器操作来触发,例如单击后退按钮(或在JavaScript中调用history.back())因此,在使用时收听popstate事件并发送popstate事件history.pushState()应该足以对href变更采取行动:window.addEventListener('popstate', listener);const pushUrl = (href) => {   history.pushState({}, '', href);   window.dispatchEvent(new Event('popstate'));};

当年话下

您无法避免轮询,href更改没有任何事件。如果你不过分,使用间隔是相当轻的。如果你担心的话,每50ms左右检查一次href对性能没有任何重大影响。

繁星coding

我在我的扩展程序“Grab Any Media”中使用此脚本并正常工作(如youtube案例)var oldHref = document.location.href;window.onload = function() {     var          bodyList = document.querySelector("body")         ,observer = new MutationObserver(function(mutations) {             mutations.forEach(function(mutation) {                 if (oldHref != document.location.href) {                     oldHref = document.location.href;                     /* Changed ! your code here */                 }             });         });     var config = {         childList: true,         subtree: true     };     observer.observe(bodyList, config);};
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答