MOJI-Q 2.0、やっと完成して公開した〜と思ってたらIEとOpera(9.25)で動いていないことが判明。そういえばFirebugを見ながらFirefoxで作っていて、たまにOpera9.5でチェックしただけで他のブラウザは一切チェックしてませんでした。
まず、Firefoxでは大丈夫だけどIEとOperaではダメなものとして、JavaScriptのconstがありました。定数は使えないのか、残念、と思いながらすべてvarに変換。
それでもぜんぜん動かない……orz
IEはエラー行を教えてくれますが、行番号が合ってたり合ってなかったりでよくわかりません。Operaにいたっては完全にだんまり。仕方ないので、いったんすべてのJavaScriptをコメントアウトし、少しずつ表に出すことにしました。面倒で手間のかかる方法ですが確実です。
結局、こういうことでした。
{
method: 'post',
postBody: Form.serialize('form'),
onSuccess: function(request)
{
// Do something
},
onComplete: function(request) {}, // ←これが原因
});
赤く書いた、Prototype.jsを使ったAjax.Requestの最後のカンマが原因です。以前はonCompleteの後にonFailureとか書いてあったものを消したので、区切りのカンマが残っていたわけです。そしてFirefoxではエラーにならないので、たった一文字のカンマに気がつくはずもなく。このカンマがあるとOpera9.25やIE7では動きません。
まとめ
- JavaScriptのconstはFirefox(2.0)、Opera(9.5)では可、IE7、Opera(9.25)では不可。
- Ajax.Request時のパラメータの最後に不要なカンマがあるとIE7、Opera(9.25)ではエラーになって動かない。Firefox(2.0)、Opera(9.5)、Safariでは問題ない。
- JavaScriptマジめんどくさい。
{
method: 'post'
, postBody: Form.serialize('form')
, onSuccess: function(request)
{
// Do something
}
, onComplete: function(request) {}
}
みたいな感じに書いていくのをおすすめします。あまり見映え良くないけどミスは減るはず。