最初のDOM解析中または解析前にDOMを変更することは可能ですか?または、DOMを操作する前に、DOMが解析および構築されるまで待つ必要がありますか?より具体的には、DOMのスクリプト要素がchromeまたはfirefoxのuserscripts / contentスクリプトまたは同様のものを使用して実行されるのを妨げることは可能ですか?
DOMが解析される前にDOMNodeInsertedでeventListenersを使用してみましたが、これらはDOMが構築された後にのみ起動されます。
最初のDOM解析中または解析前にDOMを変更することは可能ですか?または、DOMを操作する前に、DOMが解析および構築されるまで待つ必要がありますか?より具体的には、DOMのスクリプト要素がchromeまたはfirefoxのuserscripts / contentスクリプトまたは同様のものを使用して実行されるのを妨げることは可能ですか?
DOMが解析される前にDOMNodeInsertedでeventListenersを使用してみましたが、これらはDOMが構築された後にのみ起動されます。
これらは2つの別々の質問です:
1.最初のDOM解析中または解析前にDOMを変更することは可能ですか?
はい。ブラウザがルート要素を構築するとすぐに、DOMのクエリと変更を開始できます。スクリプトを実行しても、ページの一部がまだ解析されていない可能性があり、おそらくネットワーク上で転送中である可能性があることに注意してください。スクリプトは通常、スクリプトを含む/呼び出すスクリプトタグの前に、ソースで宣言された要素にアクセスできます。これには、スクリプトタグを含む親要素が含まれます。
2.DOMのスクリプト要素がchromeまたはfirefoxのuserscripts/contentスクリプトまたは同様のものを使用して実行されるのを妨げることは可能ですか?
いいえ。すべてのスクリプトが実行され、1つのスクリプトが別のスクリプトの最初の実行を妨げることはありません。ただし、イベントハンドラーに戻って削除したり、スクリプトの影響を打ち消そうとしたりすることもできます。このシナリオは少し怪しげなように見えますが、通常のJavaScriptの使用法に反しています。
Chrome用のアドブロッカーを開発している間、私は実際にこれをたくさん調べました。基本的に、Javascriptだけを使用してJavascriptを停止することはできません。特に、問題のスクリプト要素と同時に実行されるためです。したがって、それが機能するとしても、競合状態が発生します。
ドキュメントの解析中に要素を変更できますが、その後、この要素がdomに追加されます。例えば
<div id="example"></div>
<script>
document.getElementById('example').innerHTML = 'hello';
</script>
<div>something else</div>
最初のDOM解析中または解析前にDOMを変更することは可能ですか?
はい、可能です。
まず、ドキュメントが完全に解析されないようにします。次に、同じドキュメントをフェッチし、このドキュメントに対して処理を実行してから、結果のドキュメントをページに挿入します。
これが私が現在まさにそれをしている方法ですhttps://stackoverflow.com/a/36097573/6085033