S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

動的に外部のJavaScriptファイルを読み込む場合の動作(document.write編)

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で出力する場合の動作