2012-04-03 12 views
0

私userscriptは、私がアクセスし、各ページのスクリプトの数を知るために、これを含め 抽出スクリプトタグ

var scrpt=document.getElementsByTagName('script');

次のコードを持っています。

これは一部のWebサイトでは問題なく動作しますが、一部のサイトではすべてのスクリプトが表示されません。 FirefoxとChromeの両方にユーザースクリプトをインストールしましたが、同じサイトのスクリプトの数が両方のブラウザで異なります。

例えば

私はこのリンクHelp extracting text from html tag with Java and Regex

にアクセスしたときに、私のように、Firefoxでスクリプトの数を取得しています:として17とクロムで:15

しかし、私は、ページのソースを表示したときに22個のスクリプトタグがあります

問題をスローするのを手伝ってください。私もdocument.scriptsを試しましたが、それでも私は同じ結果を得ます。これは

+0

おそらく、これらの他のスクリプトタグは後で作成されます。スクリプトタグの生成は、実行から実行まで、ブラウザごとに動的で異なることがあると考えてください。ブログソフトウェアは、リストされているすべての記事の「Facebookのように」ボタンごとに新しいスクリプトタグを作成することができます。 – Tei

答えて

0

をなぜ起こるか

私はあなたのページのソースを表示しません知ることができ、あなたは右、あなたのDOMを検査しますか?ソースコードには18 <script>タグが含まれていますが(私にとっては手作業でカウントされます)、動的にロードされるものがあります(document.getElementsByTagName('script').lengthをコンソールで実行すると22個になります)。

あなたのuserscript(OperaまたはFFのgreasemonkey?)はいつ実行されますか? onDOMreadyすべてのスクリプトをavailbleにする必要はありません。オペラでは、私はonBeforeScript eventにカウンターをつけます。

同じページを表示していないため、ffとchromeのカウントが異なることがあります。あなたに返されたhtmlはログインステータス(クッキー)とおそらくブラウザ文字列の影響を受けます。特に動的に読み込まれるスクリプトはブラウザによって異なる場合があります。

+0

ページがロードされたときにユーザースクリプトが実行されます。 – user1275375

+0

はい、それ以降は他のスクリプトが挿入されてもトリガーされません。 DOMmanipulationイベントをキャッチするために、そのイベントをフックすることができます。あなたのスクリプトは数字で何をしていますか? – Bergi

+0

DOM操作イベントを使用してスクリプトをキャッチする例を挙げることができます – user1275375

0

あなたは他のスクリプト(非同期にロードされた)によって挿入されたスクリプトをカウントするDOMNodeInsertedまたはDOMNodeInsertedIntoDocument上のフックに続いて、ページの読み込みで使用可能なスクリプトの数をカウントするために、既存のアプローチを使用して開始することができます。しかし、DOMNodeInsertedにフックすると、カスタムハンドラが毎回起動されるため、ページが非常に遅くなる可能性があります。シングル。時間。何かがDOMに追加されます。

私が推薦するのは、あなたの計算が、それよりも0.5秒遅れて開始するように設定することです。

0

スクリプトはタグの内容ではありません。スクリプトタグは、ブラウザがそのsrcでファイルをダウンロードして評価するような指示です。

スクリプトタグは、ajaxでロードして評価できるスクリプトはもちろん、新しいsrc属性とともに追加、削除、再利用できます。

ところで、ドキュメントには、異なるソースからいくつのファイルが追加されても、スクリプトしかありません。