私は、この絶対にばかげたバグ (IE7 でのみ現れる) に信じられないほどの時間を無駄にしました。Web ページの方法が複雑すぎて、ここにコードを配置できず、機能しelement.className = element.className
ていませんでした。
IE7 の究極の解決策 (まあ、少なくとも私がバグに遭遇した場所でテストされています) は、DOM の変更へのフックとして以下のすべての行を実行しているようです:
try{
element.parentNode.style.cssText += "";
element.parentNode.style.zoom = 1;
element.style.cssText += "";
element.style.zoom = 1;
}catch(ex){}
フレームワークにはすでに最初の 2 行 ( で囲まれていtry-catch
ます) がありましたが、特定のシナリオでは不十分であることが判明しましたが、次の 2 行を追加することでこれが修正されました。
最大化されたウィンドウと最大化されていないウィンドウの両方でテストされています。
try/catch
特定の状況 ( 内などiframe
) では、アプリを破壊する JS エラーが生成される可能性があるためです (これは私のチーム フェローからの情報であり、私自身は遭遇したことがありません)。
それどころか、IE8 では、element.className = element.className
その役割を果たしているようです (ええ、私たちは皆、各バージョンの条件付きコードが大好きです...)
私は OS として Win XP を愛用していますが、IE に慣れ親しんでいる人々がそれを使用するまでは、このようなクレイジーな問題に対する汚い修正を見つけなければなりません... くそー悲しいです。
2013.03.05 編集
上記のスニペットは、ほとんどのシナリオで機能しているように見えましたが、1 つの場所では十分ではありませんでした。コードには次のようなものがあります。
try {
var s1 = domElt.parentNode.style, s2 = domElt.style;
var dummyCss = "foo:foo;"; // do not add leading ';' here!
s1.cssText += "";
s1.zoom = 1;
s2.cssText += dummyCss;
s2.cssText = s2.cssText.replace(dummyCss, "");
} catch (ex) {}