如何检测窗口是否在IE8标准模式下真正调整了大小?

问题描述 投票:5回答:2

我的网站上有许多样式表是为不同的屏幕宽度定制的。在调整浏览器大小时,window.onresize事件通过查看document.documentElement.clientWidth来检查是否确实发生了调整大小。如果是这样,它将依次打开更大的样式表,直到出现滚动条。然后,以相反的顺序关闭它们,直到滚动条消失。通过比较offsetWidthscrollWidth来检测滚动条。

在IE8中,两个新问题混淆了调整大小的检测。一,onresize在滚动条出现或消失时触发,二,d.dE.clientWidth报告不带滚动条的宽度,与IE7和所有其他浏览器的中断。现在,我的网站经常陷入一个循环,在循环中,onresize逻辑会激活一个较大的样式表,从而创建滚动条,然后会触发另一个无法调整大小的调整大小事件,因为clientWidth由于滚动条的出现或消失而发生了更改。如果IE8有类似我可以检查的outerWidth,这将是微不足道的修复。

javascript internet-explorer-8 dom-events
2个回答
3
投票

由于我从未处理过在任何浏览器中触发onresize的滚动条生成的问题,所以我没有意识到检查d.dE.clientWidth不是一个很好的验证方法,并且实际上从未包含滚动条。现在,我改为检查d.dE.offsetWidth,并将重复的onresize事件过滤掉。


1
投票

您几乎可以肯定地意识到这一点,并且由于它迫使IE8退出标准模式,因此它并没有真正回答您的问题-但快速的解决方法是force IE8 into IE7 mode using an HTTP header

© www.soinside.com 2019 - 2024. All rights reserved.