2009年12月27日

javascript:同期/非同期で動的なjavascriptの読込み3種

同期/非同期で動的な javascript の読込み3種

・ 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
posted by HiFa at 02:58 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2009年12月15日

Javascript:ユーザーエージェントに頼るのは良くないけども

クロスブラウジングのために UA(user agent)判定するのは良くないけども、それでも UA による判定が必要な場合があるかも知れない。ということで何年もほったらかしていた UA 判定(バージョンもついでに取得)をようやく書き換えたので、こっちにもアップ。

ただやはり、Javascript のために UA 判定が要る場合って無い。CSS のためにわざわざ Javascript 書くのも安定感を損なうだけだし、そもそも UA なんてねぇ。

うーん。最近はサーバサイド(主に PHP)ばかりで、あまり楽しくない・・・。

■ ずっとよさげな記事があったのでリンク
(10/01/06)
Magicantさん
UAIdentifier - JavaScript によるユーザエージェント判別
http://homepage2.nifty.com/magicant/sjavascript/uai-spec.html
※ ざっと目を通しただけだけど良さそう。覚えも含めて。
(10/01/19)
tanablog さん
JavaScript ライブラリの、ブラウザ判定ロジックを調べてみた
http://blog.kaihatsubu.com/archives/001593.html
※ 自分としては、やはりUA判定より実装の方が好きだなぁ。

■ 確認環境
msie 7
firefox 3
opera 10
chrome 3
safari 4

その他、単純にユーザーエージェントの文字列によるテストはこちら
※ ブラウザーそのものによる判定ではなく、単純にユーザーエージェントの文字列を突っ込んでいる事に注意。

■ 確認できるブラウザ
msie, firefox, opera, chrome, safari, konqueror, lunascape, netscape, sleipnir
とその各バージョン(上記の文字列で返ってきます。)
ないだろそれ!ってヤツも居座っていますが、まぁ気にしない。ちなみに不明の場合は、空文字として扱えます。その他 gecko や mozilla とも返ってきますが、ほとんどの場合は不明と同じです。
続きを読む
posted by HiFa at 14:10 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする