gpt4 book ai didi

javascript - 无法在呈现之前删除 <script> 元素

转载 作者:行者123 更新时间:2023-11-29 10:58:03 29 4
gpt4 key购买 nike

我正在尝试拼凑一个 chrome 扩展程序,它将在渲染之前删除所有脚本元素……我想我已经接近了,因为看起来我提前捕捉到了它们,但我就是无法得到它们删除:

content.js

var mo = new MutationObserver(process);
mo.observe(document, {subtree:true, childList:true});
document.addEventListener('DOMContentLoaded', function() { mo.disconnect()

});

function process(mutations) {
for (var i = 0; i < mutations.length; i++) {
var nodeArray = mutations[i].addedNodes;
for (var j = 0; j < nodeArray.length; j++) {
var n = nodeArray[j];
if (n.nodeName == "SCRIPT") {
deleteNode(n);
}
}
}
}

function deleteNode(node) {
console.log("ATTEMPTING TO DELETE " + node.nodeName);
node.remove();
}

list .json

{
"name": "Test Extension",
"version": "1.0",
"description": "This is just a test",
"manifest_version": 2,
"content_scripts": [
{
"matches": ["http://myRealUrl.com/internal/default.asp?*"],
"js": ["content.js"],
"run_at": "document_start",
"all_frames": true
}
]
}

最佳答案

你不能。

在大多数情况下*,<script>在 DOM 树完全构建之前,元素在解析器遇到它们时立即执行。 (这是允许 document.write() 正常工作所必需的,等等。)扩展没有机会中断此过程。

( Here is the relevant portion of the HTML5 specification. )

如果您想阻止脚本执行,一种可行的方法可能是设置不允许脚本的内容安全策略。请记住,这也会禁用内联事件处理程序(如 onclick )。


*:一个异常(exception)是具有 async 的脚本属性集。不过,大多数脚本不会。

关于javascript - 无法在呈现之前删除 &lt;script&gt; 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53089393/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com