広告主の 1 つは、次の Javascript 関数を含むランディング ページを持っています。
sfHover = function() {
if (!document.getElementsByTagName) return false;
var sfEls1 = document.getElementById("catmenu").getElementsByTagName("li");
for (var i=0; i<sfEls1.length; i++) {
sfEls1[i].onmouseover=function() {
this.className+=" sfhover1";
}
sfEls1[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" sfhover1\\b"), "");
}
}
var sfEls1 = document.getElementById("menu").getElementsByTagName("li");
for (var i=0; i<sfEls1.length; i++) {
sfEls1[i].onmouseover=function() {
this.className+=" sfhover";
}
sfEls1[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
}
}
}
IE7 でページに移動すると、そのif
行で構文エラーが報告されます。私が知る限り、これは完全に優れた構文です。IE8 は文句を言いませんし、Chrome も文句を言いません。私が見ることができる唯一の潜在的な問題は、return false;
ステートメントが中括弧で囲まれていないことですが、それらはオプションです。それらを追加しようとしましたが、エラーは解決しませんでした。
これはIE7のバグですか?
アップデート:
この関数定義以外はすべてページから削除して、ロードする他の多くのスクリプトのいずれかと関連しないようにしました。エラーは引き続き発生しました。
行以外のすべてを削除するif
と、エラーはなくなりました。次の行を追加し直したところ、エラーが返されました。興味深いのは、2 行目で予想されるエラーが発生することです。 catmenu
(すべての HTML を削除する前であっても) ページに要素がないため、 document.getElementById(...) is null or not an object
. この問題について広告主に知らせるよう、マーケティング担当者に依頼しました。
この論理エラーにより、前の行に構文エラーがあると IE7 が判断する可能性はありますか? ページに要素を追加したcatmenu
ところ、構文エラーもなくなりました。
次に、残りの関数を追加し直しました。2 番目のsfEls1
割り当ても、存在しない ID を参照しています。これにより、前の}
行が構文エラーとして報告されました! これは奇妙なIE7のバグであることを確認していると思います.