AdSense独自

2013年8月2日

よく分からないけど、JavaScriptがIE7でうまく動かない場合

他のブラウザ(IE8以降、FireFox、Chrome、Opera等)でOKなのに、IE7でJavaScriptが期待通りの動作をしない場合のチェック点。

連想配列で、各要素の区切りに入れるカンマを、最後にも入れてしまう。

これ、よくやっちゃうんだよな。。。

■■■■例
(OKな書き方)
var test_array = new Array();
test_array = {
  val1 : 1,
  val2 : 2,
  val3 : 3
}

(NGな書き方)
var test_array = new Array();
test_array = {
  val1 : 1,
  val2 : 2,
  val3 : 3,
}


どこが違うって、「val3 : 3」の後のカンマの有無です。
これ、書式的には最後には入れないのが正しいと思うのですが、なぜか大方のブラウザではNG例でも問題なく動作してしまう。
ところがIE7ではこれが厳密なんですね。
(たしかIE6も。最近IE6は動作対象にしてないので忘れた)

IE7はNG例だと、「val3 : 3,」のところでエラーが発生し、以降のスクリプトがキャンセルされます。
これは、IE10でも、歯車をクリックして開発ツールを使い、動作モードをIE7にすれば確認できます。
またスクリプトのデバッグモードを使えば、この箇所でエラーが出ているとはっきり分かります。

でもねー、なかなかここに気づかないんですよ。(いや、気づけよ。。。)

以降のスクリプトが全て無視されるというのがミソで、例えばタグをクリックした時の動作のなかでこのエラーがあったとする。
その後ろにはのhrefを無視するために「return false;」を書いていたとする。
NG例だと「return false」が実行されないため、hrefで指定されたページへ移動するような動きをしてしまうわけです。
この時点で、IE7での「return false」の使用に問題があるのではないかと、見当違いなところを疑ってしまったりしてね。
(実際、IE7でreturn falseが効かないという現象もあるようですが)

まぁ、まずはきちっと書く、綴りミスや書式のミスをしないって、結局基本的なところが大切なわけですね。。。

0 件のコメント: