Javascript 网络应用程序中的Android屏幕分辨率不是恒定的
这很奇怪。我正在使用javascript计算网页中的分辨率。为此,我对以下函数进行了简化:Javascript 网络应用程序中的Android屏幕分辨率不是恒定的,javascript,android,screen-resolution,Javascript,Android,Screen Resolution,这很奇怪。我正在使用javascript计算网页中的分辨率。为此,我对以下函数进行了简化: function check() { var win = document.defaultView || document.parentWindow, ratio = win.devicePixelRatio ? win.devicePixelRatio : 1, h = win.innerHeight, w = win.innerWidth,
function check() {
var win = document.defaultView || document.parentWindow,
ratio = win.devicePixelRatio ? win.devicePixelRatio : 1,
h = win.innerHeight,
w = win.innerWidth,
root = document.documentElement;
if (!h) {
h = root.clientHeight;
w = root.clientWidth;
}
alert("height/width/ratio; " + h + "/" + w + "/" + ratio);
}
在android设备上,似乎有一种非常奇特的行为:
我将以Nexus S为例,但显然我已经在运行不同版本的许多其他Android设备上验证了这一点
如果您通过单击电子邮件应用程序gmail或outlook中的链接到达包含上述脚本的页面,则警报将生成1130/800/1.5高度和宽度太高。这是一致的。现在,如果您转到地址栏,编辑url添加/删除一个参数或参数值,然后点击go,完全相同的代码将生成452/320/1.5,这更像它,这也是一致的
这究竟是怎么发生的,为什么发生的
编辑:值得注意的是,到目前为止,这似乎只适用于devicePixelRatio>1的设备,即v1.5/1.6上的旧Android手机。经过大量搜索和调试,这几乎像是一个bug 复制很容易:如果上面的脚本在onload事件中同步运行,并且您单击打开新窗口、电子邮件应用程序或目标为空的网页的内容,那么屏幕和窗口的宽度和高度属性都将错误。如果您使用jQuery、YUI或纯javascript,则没有区别 解决方案/解决方法是将onload中调用的方法包装到setTimeout中,并将timeout设置为0。这将异步运行该方法并产生正确的结果
<body onload="setTimeout(check, 0);">
朋友们,这就结束了这个案例。浏览器缩放是否会影响它?我无法想象,不会。这两种情况下的页面看起来都一样,您唯一要做的就是更改url并重新加载,而不是使用缩放。我看不出在这段时间内,变焦会自动改变。