Не удается удалить <script>элементов до того, как они отобразятся - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь собрать 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();
}

manifest.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
    }
  ]
}

1 Ответ

0 голосов
/ 31 октября 2018

Вы не можете.

В большинстве ситуаций *, элементы <script> выполняются, как только они встречаются синтаксическим анализатором, до того, как дерево DOM будет полностью построено. (Это необходимо для правильной работы document.write(), между прочим.) У расширения нет окна для прерывания этого процесса.

( Вот соответствующая часть спецификации HTML5. )

Если вы хотите предотвратить выполнение сценариев, одним из жизнеспособных подходов может быть установка политики безопасности содержимого, которая не разрешает выполнение сценариев. Имейте в виду, что это также отключит встроенные обработчики событий (например, onclick).


*: Исключением являются сценарии, для которых установлен атрибут async. Однако большинство сценариев этого не делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...