3

HTMLページのロードをブロックし、ページに含まれるJavaScriptでいくつかの検証を行い、コンテンツスクリプトで、ページのロードを続行する(またはしない)必要があるChrome拡張機能を開発しています。

"run_at": "document_start" を使用したマニフェストでは、コンテンツ スクリプトが空の html を取得し、検証を実行できません。document_end で run_at を使用すると、ページに含まれる js が既に実行され、その直後に拡張機能がその検証を行います...

コンテンツ スクリプトなどで DOMContentBeforeLoad のように設定する方法はありますか? 私は本当に選択肢がありません..

ありがとう

4

2 に答える 2

3

TopLevel.js の仕組みを見てみましょう: https://github.com/kristopolous/TopLevel ( https://github.com/kristopolous/TopLevel/blob/master/toplevel.jsの興味深いソース)

これは、ページに明示的に含めるライブラリです。ページに到達してすぐに実行すると、document.write() の <plaintext> 要素に style='display: none' を指定します。これにより、ブラウザーはページの残りの部分の解析を即座に停止し、プレーン テキストの結果を非表示にします。 (plaintext は非推奨の要素であり、ページ コンテンツの解釈を停止し、すべての HTML をバニラの解析されていないプレーン テキストとして扱います: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/plaintext )。

次に、トップレベルは <plaintext> 要素自体のテキスト コンテンツを解析し (そして、ライブラリのポイントであるテンプレート化を行います)、結果として得られる新しいコンテンツを手動でページに document.write() します。

同様のことができるはずです: <plaintext> 要素を挿入してブラウザによるページの解析を停止し、それを自分で解析 (またはそれでやりたいことを実行) してから、好きなものを書き出す可能性があります (オリジナルを含む)満足したら、ページにコンテンツ) を追加します。

于 2015-08-20T09:50:33.207 に答える
0

あなたがしていることを行うには、document_startで行ったことを行う必要があると思います。次に、ajax呼び出しを介してhtmlページをロードし、自分で解析します。

ブラウザは通常、すべてのスクリプトをロードしてから実行するわけではありません。これはページの順序で非同期に発生するため、javascript がロードされても何も実行されない場所でキャッチできるポイントはありません (ただし、ページのコンテンツも制御します)。

于 2015-06-12T01:21:38.467 に答える