Можно ли изменить DOM во время / до первоначального анализа DOM? - PullRequest
1 голос
/ 04 апреля 2010

Можно ли изменить DOM во время или до первоначального анализа DOM? Или мне нужно подождать, пока DOM будет проанализирован и собран, прежде чем взаимодействовать с ним? Точнее, возможно ли препятствовать выполнению элемента script в DOM с использованием скриптов usercripts / content или аналогичных в chrome или firefox?

Пробовал с помощью eventListeners на DOMNodeInserted до анализа DOM, но они запускаются только после сборки DOM.

Ответы [ 4 ]

1 голос
/ 05 апреля 2010

Это два отдельных вопроса:

1. Можно ли изменить DOM во время или до первоначального анализа DOM?

Да. Как только браузер создаст корневой элемент, вы можете начать запрашивать и изменять MOM. Обратите внимание, что при запуске сценария некоторые страницы могут все еще не обрабатываться, возможно, даже передаваться по сети. Ваш скрипт обычно имеет доступ к любому элементу, объявленному в источнике до тега script, содержащего / вызывающего ваш скрипт. Это включает в себя родительские элементы, содержащие тэг скрипта.

2. Можно ли помешать выполнению элемента сценария в DOM с использованием скриптов usercripts / content или аналогичных в chrome или firefox?

Нет. Все сценарии выполняются, и один сценарий не может предотвратить первоначальное выполнение другого сценария. Однако, возможно, вы можете вернуться и удалить обработчики событий, а иначе попытаться противодействовать эффектам скрипта. Хотя этот сценарий кажется немного неясным и / или противоречит обычному использованию JavaScript.

0 голосов
/ 19 марта 2016

Можно ли изменить DOM во время или до первоначального анализа DOM?

Да, это возможно.

Начните с того, что полностью запретите синтаксический анализ документа, затем на стороне, выберите тот же документ, выполните любую обработку этого документа, а затем вставьте полученный документ на страницу.

Вот как я сейчас это делаю https://stackoverflow.com/a/36097573/6085033

0 голосов
/ 04 апреля 2010

вы можете изменить элементы при разборе документа, но после этого этот элемент был добавлен в dom. например

<div id="example"></div>
<script>
    document.getElementById('example').innerHTML = 'hello';
</script>
<div>something else</div>
0 голосов
/ 04 апреля 2010

Я на самом деле много разбирался в этом при разработке adblocker для Chrome. По сути, вы не можете использовать только Javascript, чтобы остановить Javascript, тем более что он будет работать одновременно с соответствующим элементом script. Таким образом, даже если это сработает, это вызовет состояние гонки .

...