fxでdocument.scripts対応となんか
fxでdocument.scripts対応
id:shogo4405:20070206:1170741017でfxは非対応なんだかんだといっていますがdocument.scriptsはdocument.getElementsByTagName('script')とニアリーイコールなので以下のコードを任意の場所に追加することでfx系でdocument.scriptsと似た役割をさせることが可能。
if(!document.scripts){ document.scripts = document.getElementsByTagName('script'); };
サンプル
// foo.js if(!document.scripts){ document.scripts = document.getElementsByTagName('script'); }; alert(document.scripts[document.scripts.length-1].id);
<head> <script></script> <script id="foo" src="foo.js"></script> // alert(foo); <script></script> </head>
ちょっと発見
色々と検証コードを書いた結果から、推測するとどうやらfxでは(他知らん)では、以下のようにhead要素に直書きしたコードではAを評価してBを評価してCを評価ではなくhead内部の直書きしているscript要素を収集してまとめて評価しているようである。
一方body要素では見つけたら逐一評価しているようである。あくまで仮説の領域だし。困るのは以下みたいに document.scripts.lengthを利用した場合のときくらい。
ただ、head要素でdocument.write(1);みたいに何か要素書き出すとそうでも無くなるしsrc属性で呼び出したものは正常にdocument.scripts.lengthが取得される。
<head> <script id="A"> if(!document.scripts){ document.scripts = document.getElementsByTagName('script'); }; alert(document.scripts.length); // 1 </script> <script id="B"> alert(document.scripts.length); // 1 </script> <script id="C"> alert(document.scripts.length); // 1 <head>要素の直書きは1になる。 </script> </head>
<body> <script id="A"> if(!document.scripts){ document.scripts = document.getElementsByTagName('script'); }; alert(document.scripts.length); // 1 </script> <script id="B"> alert(document.scripts.length); // 2 </script> <script id="C"> alert(document.scripts.length); // 3 </script> </body>