Javascript(没有jQuery) - 谷歌浏览器有时会错误地检测窗口宽度

时间:2013-06-09 18:45:22

标签: javascript google-chrome browser width detect

注意:这将作为错误报告给Google,但修复程序通常会延迟。

基于窗口宽度调用函数的网页适用于IE,Firefox等,但Chrome中“有时”失败。问题(在基于Chromium的浏览器中)仅在目标网页在浏览器启动时自动重新加载时发生。

<script>

var dde = document.documentElement;

if(!document.documentElement) dde = document.body; // fix for IE6 and earlier 

myWidth = Math.max(dde.scrollWidth,dde.offsetWidth,dde.clientWidth);

if(myWidth < 960) document.location.href="http://www.gooplusplus.com/mini.php";  

</script>

1 个答案:

答案 0 :(得分:0)

进一步测试发现,在浏览器启动时,即使窗口实际上已最大化,Chrome也会从非最大化窗口大小获取窗口宽度结果。此外,仅在非活动的浏览器选项卡上发生此错误。

解决方案所需的两个步骤是检测:

(1)是基于Chromium的浏览器? - &GT; navigator.userAgent.indexOf("Chrome/")>0

(2)标签是否处于非活动状态? - &GT; document.webkitVisibilityState == "hidden"

测试网址:http://www.gooplusplus.com/chrome-bug.html

我的部分解决方案:

<script>

var dde = document.documentElement;

var tabVisible = document.webkitVisibilityState;

if(!document.documentElement) dde = document.body; // fix for IE6 and earlier 

myWidth = Math.max(dde.scrollWidth,dde.offsetWidth,dde.clientWidth);

if( ( navigator.userAgent.indexOf("Chrome/")<0 || tabVisible!="hidden" ) && myWidth < 960 ) 
    document.location.href="http://www.gooplusplus.com/mini.php";  

</script>

这就是基于窗口宽度的URL重定向所需要的全部内容。然而,这绕过了另一个假设的情况,其中(1)浏览器是Chrome,(2)标签是非活动的(隐藏的),但是(3)最大化的大小确实是&lt; 960像素。那么,有更完整的解决方案吗?