IEでJS動かなかった時に直した時のメモ。
日付またいでさて日記でも書くか、と思ったけど18日の欄が出て来た、こういう仕様なのかな。
それはさておきFirefoxベースで開発していざIEで動かすとうごかねぇ!なんてよく聞く話ですが、例外無く私もはまりました。
「FirefoxのJS実装が正しいんじゃヴォケーー!IE使ってるやつなんざしらねぇぜタコ!」と言いたいとこですが残念ながらブラウザのシェアはまだまだIEが多いのでそうも言ってられません。
どなた様かの役に立てるかなと思い、メモっときます。当たり前すぎることばっかりかもしれませんが。
尻カンマ
prototypeでミスってるのかよ!とか思ってコロンを消したらあっさり動いた。びっくりした。つけるとIEではエラーでるのねん。
これはきっとPerl使いがはまる罠。
Moge.prototype = { initialize : function(){}, some_process : function(){}, //<-このカンマをつけるとエラー };
JSON evalのときに括弧をつける
これはIEっていうより古いFirefoxかな。prototype.jsとかjqueryでもやってるみたいなのでやっておきましょう。
var json_str = '[{moge:1},{fuga:2}]'; var json = eval('(' + json_str + ')');
IEの強力すぎるCaching
小耳に挟んではいたけどはまるとは。
IEではURIが同じだとCacheが明示的にクリアされるまでずっとその値を返し続けるんですね。何かしらランダムな値を入れてCachingを防がなきゃ行けない。
常套句と言うことで日付関数を使う。
if ( method == 'get' ) { params['rndstr'] = (new Date()).getTime(); } jQuery.ajax({ url : uri, type : method, data : params, success : function(json_str,stat) { #処理する } });
Wrapしたメソッドか何かで上記見たいに書いておく。なんか見苦しいけど仕方が無い。
encode/decodeちゃんとやる。
これはJavaScript関係ないか。
encode関連っていつも忘れるんですよね。ちゃんとInflate/Deflateの設定ちゃんとすればいいんですけど。
外の世界からPerlの世界に文字列を入れる時はdecode。
Perlの世界から外へ出す時はencode。
忘れないように書いておこう。
全く関係ないですけどVMware Fusionいいですよ。検証用もかねて買ったんですけど、久しぶりにおかねだしてソフトウェア買って満足した感じ。
でもWin用だとVMware Playerあるからなんだかなぁと言う感じですけど、まぁVMwareにはお世話になってるので買っても損は無いかなと。