・ eval(firefox etc)/execScript(ie)で直書きタイプ(非同期)
・ eval(firefox etc)/execScript(ie)で直書きタイプ(同期)
・ script タグ追加タイプ(非同期)
※ それぞれ再読み込みを防止している。
※ 非同期は call back 指定付き。
今更な気もしますが、動的な javascript の読み込み3種を書いたので全部UP。必要に駆られたのは1番目だけなのに、余計なもん作ってるあたり現実逃避です。そもそも同期が要るのかどうか疑問だけども、まぁインクルードのような使い方になるのでしょうか。call back を意識しない分、同期の方(インクルードの方)が構築も単純かな。
■ 追加・修正
・ 2010/01/19
■ 確認環境
msie 7
firefox 3
opera 10
chrome 3
safari 4
関数化していなかった物を関数化したのでバグがあるかも知れません。一応確認環境は上記です。
■ 一応メリットとデメリット
eval や execScript で直接実行している方は、XMLHttpRequest でコードを取得します。そのため以下の留意事項があります。
・ js の文字セットは html の文字セットに関わらず utf-8
・ 外部 js ファイルは取得できない。
script タグ追加タイプの方の留意点。
・ js の文字セットは html の文字セットと同一にしなければならない。もしくは charset 属性を指定できるように改造か meta で chaset 指定。
・ タイマを利用して call back している。
・ 読み込んだかどうかの判定は、対象のスクリプトにある変数や関数名を指定してやる事で対処している。
あと、全体を通して・・・。
再読み込みを防止しつつ call back 出来るようにしているために冗長。他、Ajax 部分は他のライブラリ使うべきなんだろうけど、極力1関数で完結させたい!などというのが、そもそもの間違いなのかも知れない。
続きを読む
タグ:javascript