如果 Greasemonkey 脚本正在运行函数,然后使用
window.location.assign()
导航到新页面,是否有办法保持这些函数运行,而不需要重新加载整个脚本?我想知道这一点,因为 Greasemonkey 是一个浏览器插件,也许无论您导航到哪个页面,它都可以继续工作。
我认为我不能使用 Ajax 或 iframe,因为它需要导航到不同的域。
感谢您提供的任何帮助!
我怀疑这是可能的。 Greasemonkey 是一个浏览器插件,但您为特定页面创建的脚本只能在该页面内部运行,而不能全局运行。一旦您离开,脚本(您离开的页面的一部分)就会被终止,就像页面的其余部分一样。
在大多数情况下,您可能面临的只是 SPA 的问题,这意味着网站没有进行“正常导航”。在这种情况下*猴子无法检测到它并重新运行脚本,无需额外的努力:
// ...
// @match *://www.youtube.com/*
// ...
onUrlChange();
if (self.navigation) {
navigation.addEventListener('navigatesuccess', onUrlChange);
} else {
let u = location.href;
new MutationObserver(() => u !== (u = location.href) && onUrlChange())
.observe(document, {subtree: true, childList: true});
}
function onUrlChange() {
if (!location.pathname.startsWith('/watch')) {
// deactivate();
return;
}
console.log('processing', location.href);
// activate();
}
如果您想要在刷新、跨域(站点)、不同选项卡之间共享信息,这里根据您的需要提供不同复杂度的解决方案:
最后,如果你真的想保留跨多个 JavaScript 领域(每帧不同的上下文)和不同域的执行,你最好将其作为扩展。