Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t删除<;脚本>;渲染前的元素_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Can';t删除<;脚本>;渲染前的元素

Javascript Can';t删除<;脚本>;渲染前的元素,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在尝试拼凑一个chrome扩展,它将在渲染之前删除所有脚本元素。。。我想我很接近,因为我似乎提前抓住了它们,但我就是无法将它们移除: content.js var mo = new MutationObserver(process); mo.observe(document, {subtree:true, childList:true}); document.addEventListener('DOMContentLoaded', function() { mo.disconnect()

我正在尝试拼凑一个chrome扩展,它将在渲染之前删除所有脚本元素。。。我想我很接近,因为我似乎提前抓住了它们,但我就是无法将它们移除:

content.js

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

你不能

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

()

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



*:设置了
async
属性的脚本除外。不过,大多数脚本都没有这样做。

有人问过几次。简而言之,您只需使用原始页面的修改html覆盖页面:1)fetch location.href,2)使用regexp replace删除这些脚本,3)使用document.open+document.write。非常好的选择!谢谢你,谢谢你。。。我相信使用内容安全策略已经过时了,因为我需要允许来自同一站点上其他页面的JavaScript。。。我相信内容安全性不能局限于单个页面。内容安全策略由HTTP标头设置,因此可以逐页控制。每当我尝试时,都会收到“不允许特定路径”。加载扩展时出错?您无法向权限中添加特定路径,但是您可以在设置CSP头之前检查请求的路径。
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();
}
{
  "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
    }
  ]
}