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にはお世話になってるので買っても損は無いかなと。