页面导航后保持 GreaseMonkey 脚本正常工作

问题描述 投票:0回答:2

如果 Greasemonkey 脚本正在运行函数,然后使用

window.location.assign()
导航到新页面,是否有办法保持这些函数运行,而不需要重新加载整个脚本?我想知道这一点,因为 Greasemonkey 是一个浏览器插件,也许无论您导航到哪个页面,它都可以继续工作。

我认为我不能使用 Ajax 或 iframe,因为它需要导航到不同的域。

感谢您提供的任何帮助!

javascript jquery greasemonkey
2个回答
2
投票

我怀疑这是可能的。 Greasemonkey 是一个浏览器插件,但您为特定页面创建的脚本只能在该页面内部运行,而不能全局运行。一旦您离开,脚本(您离开的页面的一部分)就会被终止,就像页面的其余部分一样。


0
投票

在大多数情况下,您可能面临的只是 SPA 的问题,这意味着网站没有进行“正常导航”。在这种情况下*猴子无法检测到它并重新运行脚本,无需额外的努力

引自ViolentMonkey官方文档

// ...
// @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 领域(每帧不同的上下文)和不同域的执行,你最好将其作为扩展。

© www.soinside.com 2019 - 2024. All rights reserved.