Tampermonkey 脚本被覆盖
Tampermonkey script getting overwritten
我正在尝试使用 tampermonkey 从网页的列表中删除 html 个元素,但在 ~0.5 秒后,剩余的元素被半覆盖 -
原来:[项目 1 links 到项目 1,项目 2 links 到项目 2,项目 3 links 到项目 3]
在我的脚本之后的 0.5 秒内,一切都很完美:[项目 2 links 到项目 2,项目 3 links 到项目 3]
然后元素被覆盖(即使悬停显示正确):[item 2 links to item 1, item 3 links to item 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 = "";
}
后台仍有某种脚本运行覆盖了默认的link...我的脚本覆盖buggy/not够了吗?或者有更好的方法来解决这个问题吗?
如果您 运行 在文档开始处使用用户脚本,页面可能尚未加载 - 没有要删除的标签。
如果您 运行 您的用户脚本正常,页面将已经加载 - 脚本标签可能已经 运行。
如果您想确保页面 运行 没有任何自己的脚本,请在页面加载开始时将 MutationObserver 附加到整个文档,并在添加脚本标签时将其删除. MutationObserver 运行s 将在 之前 的微任务,脚本内容将 运行:
<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>
确保您的用户脚本 运行s 具有即时脚本注入和 document-start
,以确保它 运行s before 上的任何内容该页面存在。 (如果页面能够在您的用户脚本 运行 之前获取脚本,它可以做任何它想做的事情)
我正在尝试使用 tampermonkey 从网页的列表中删除 html 个元素,但在 ~0.5 秒后,剩余的元素被半覆盖 -
原来:[项目 1 links 到项目 1,项目 2 links 到项目 2,项目 3 links 到项目 3]
在我的脚本之后的 0.5 秒内,一切都很完美:[项目 2 links 到项目 2,项目 3 links 到项目 3]
然后元素被覆盖(即使悬停显示正确):[item 2 links to item 1, item 3 links to item 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 = "";
}
后台仍有某种脚本运行覆盖了默认的link...我的脚本覆盖buggy/not够了吗?或者有更好的方法来解决这个问题吗?
如果您 运行 在文档开始处使用用户脚本,页面可能尚未加载 - 没有要删除的标签。
如果您 运行 您的用户脚本正常,页面将已经加载 - 脚本标签可能已经 运行。
如果您想确保页面 运行 没有任何自己的脚本,请在页面加载开始时将 MutationObserver 附加到整个文档,并在添加脚本标签时将其删除. MutationObserver 运行s 将在 之前 的微任务,脚本内容将 运行:
<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>
确保您的用户脚本 运行s 具有即时脚本注入和 document-start
,以确保它 运行s before 上的任何内容该页面存在。 (如果页面能够在您的用户脚本 运行 之前获取脚本,它可以做任何它想做的事情)