document.writeでこんな書き方もあるので試してみた。
document.write('<script src="' + src + '" type="text/javascript"></script>'):
変更箇所
変更前
function setLinkJs(filename) { var script = document.createElement('script'); script.setAttribute("type", "text/javascript"); script.setAttribute("src", "./" + filename); var head = document.getElementsByTagName("head")[0]; head.appendChild(script); }
変更後
function setLinkJs(filename) { document.write("<script src='" + "./" + filename + "' type='text/javascript'><\/script>"); }
動作
ブラウザでの動作の違いはなかった。
Chrome | Firefox | InternetExplorer | |
---|---|---|---|
(1) | エラー | エラー | エラー |
(2) | OK | OK | OK |
(3) | OK | OK | OK |
(4) | エラー | エラー | エラー |
document.writeされる箇所(DOMを確認)
これもブラウザで違いはなかった。
元のソース
<script type="text/javascript"> // document.write("<script src='./linktest_hoge.js' type='text/javascript'><\/script>"); する </script>
document.writeされた後
<script type="text/javascript"> // document.write("<script src='./linktest_hoge.js' type='text/javascript'><\/script>"); する </script> <script src='./linktest_hoge.js' type='text/javascript'></script> // 挿入したscriptタグの後ろに追加される
「JS LINK TEST」ボタンクリック後の確認
HTMLのDOMがリセットされてる?
InternetExplorerでソースを確認すると、以下のような状態になってた。
<script src="./linktest_fuga.js" type="text/javascript"></script>
Chromeも、デベロッパツールのElementsで確認すると、ほぼ同等の状態になってる。
Firefoxも、デバッガで確認するとソースが「linktest_fuga.js」のみの状態になってる。
buttonのonclink以外のイベントでも同じような動作なので、イベント処理内ではdocument.writeの方法は使えないのではないか?
以下が、「JS LINK TEST」ボタンクリック後のJavaScriptのコードだけど、(3)までは正常に動作してるのに、(4)が動作してない…なんでだろ?
<script type="text/javascript"> function clickButton() { setLinkJs("linktest_fuga.js"); // (4)の外部JavaScriptファイルを読み込み alert(getHoge()); // (3) alert(getFuga()); // (4) } </script>
その他の問題
読み込みの関係でレンダリング速度の問題など
document.writeでSCRIPTを書き出すなやで!
scriptタグの実行順序の問題など
scriptタグをdocument.writeで出力する場合の動作