我刚刚在这个绝对荒谬的错误(仅在 IE7 中表现出来)浪费了难以置信的大量时间,网页太复杂,无法将代码放在这里,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){}
我们的框架中的前两行(用try-catch 包围)已经有很长时间了,但在某些特定情况下证明是不够的,但添加接下来的两行可以解决这个问题。
在最大化和非最大化窗口中测试。
try/catch 存在是因为在某些特定情况下(例如在iframe 内部)它可能会生成一个 JS 错误,从而破坏应用程序(这是来自我的团队成员的信息,我自己没有遇到过) .
相反,对于 IE8,element.className = element.className 似乎正在发挥作用(是的,我们都喜欢每个版本的条件代码......)
我喜欢 Win XP 作为一个操作系统,但在 IE 绑定的人使用它之前,我们必须为这些疯狂的问题找到肮脏的修复......该死的可悲。
编辑 2013.03.05
上面的 sn-p 似乎在大多数情况下都有效,但在一个地方还不够。现在我们的代码中有这样的东西:
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) {}