繁体   English   中英

Tampermonkey 脚本被覆盖

[英]Tampermonkey script getting overwritten

我正在尝试使用 tampermonkey 从网页上的列表中删除 html 元素,但在大约 0.5 秒后,其余元素被半覆盖 -

原文:[item 1链接到item 1,item 2链接到item 2,item 3链接到item 3]

在我的脚本之后的 0.5 秒内,一切都很完美:[项目 2 链接到项目 2,项目 3 链接到项目 3]

然后元素被覆盖(即使悬停显示正确):[项目 2 链接到项目 1,项目 3 链接到项目 2]

我假设这是由于某些在后台运行的脚本造成的,但即使我尝试通过以下方式删除所有脚本:

// @run-at document-start:
var scripts = document.getElementsByTagName('script');
  for (var k = 0; k < scripts.length; k++) {
    scripts[k].setAttribute('src', 'asdf');
    scripts[k].innerText = "";
    scripts[k].innerHTML = "";
  }

仍然有某种脚本在后台运行,覆盖默认链接......我的脚本覆盖错误/不够吗? 或者有没有更好的方法来解决这个问题?

如果您在文档开始时运行您的用户脚本,该页面可能尚未加载 - 将没有要删除的标签。

如果您正常运行用户脚本,页面将已经加载 - 脚本标签可能已经运行。

如果要确保页面不运行任何自己的脚本,请在页面加载开始时将 MutationObserver 附加到整个文档,并在添加脚本标记时将其删除。 MutationObserver 运行的微任务将脚本内容运行之前:

 <script> // Example userscript code const observer = new MutationObserver((mutations) => { for (const { addedNodes} of mutations) { for (addedNode of addedNodes) { if (addedNode.nodeType === 1 && addedNode.tagName === 'SCRIPT') { console.log('script removed'); addedNode.remove(); } } } }); observer.observe(document.documentElement, { childList: true, subtree: true }); </script> <script> console.log('Example page script running'); </script> <div> Content <script> console.log('Example nested page script running'); </script> </div>

确保您的用户脚本使用即时脚本注入和document-start运行,以确保它在页面上的任何内容存在之前运行。 (如果页面能够在您的用户脚本运行之前获取脚本,则它可以做任何想做的事情)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM