窗口的screen.width/height应该对应实际屏幕的宽度/高度吗?

7
在新款Kindle 3G的WebKit浏览器上尝试玩耍时,我注意到window.screen.widthwindow.screen.height并不反映实际的屏幕尺寸。物理屏幕(或者说是纸张)尺寸为800 x 600。我得到的结果如下:
  • 横屏模式下为800 x 506
  • 竖屏模式下为600 x 706
但有趣的是,桌面上运行的Chrome和Safari(也是基于WebKit)报告了实际的屏幕分辨率。
根据MDC的说法,这些属性并不属于任何规范,因此可能没有严格的定义应该报告什么宽度/高度。但是,它们不应该反映实际的屏幕尺寸吗?
4个回答

9

更新:

在模拟器中,我们遇到的问题是window.screen.width在使用不反映设备实际像素的屏幕时出现。因此,您在屏幕上看到的是320,而设备实际像素为480或其他值。但我不明白为什么屏幕宽度的值会给出模拟器屏幕大小而不是实际像素。

这件事情可能与设备有关吗?如果其密度在某些尺寸上更高......由于某种原因,这可能会导致一些错误的屏幕宽度大小?

无论如何,请阅读下面的内容以了解我的解决方案。


在模拟器上,screen.availWidth 对于某些屏幕尺寸无效。

现在唯一有效的方法是:

window.innerWidth
window.innerHeight

这将返回Viewport的值。在我的情况下,我正在运行一个HTML5应用程序。显然,这些值不会在缩放时更新。

他们在Android的Webkit上有一些尺寸问题。您可以看到来自Android开发人员在此处谈论它。可能在Honeycomb中修复。

有人声称它会采用某些尺寸,就好像软键盘存在一样。


1

看起来,无论在许多移动操作系统上,screen.availWidth和screen.width都始终返回availWidth。

然而,我无法找到任何关于此的文档,但我测试了Android 2.2,并且无论请求什么,都可以得到减去顶部菜单栏的屏幕大小。


我只在移动操作系统上的webkit上测试过,但是我发现了多个故障点和其他奇怪的问题。第一个奇怪之处是screen.height在Linux和webkit(以及它的预分叉khtml)上可以正常工作。然而,在Kindle和Android上它失败了,这两者都在其核心上运行Linux和webkit。这让我开始考虑其他可能性,比如SquirrelFish是错误数据的分发者。 - Harmon Wood

1

我认为如果从系统获取到错误的值,WebKit将无能为力。当然,这些值应该由screen.availWidth和screen.availHeight表示,但我认为这与鼠标(指针)位置的event.screenX和event.screenY有关。


有趣的是,navigator.appVersion 在横向和纵向模式下都报告 5.0 (Linux; U; en-US) AppleWebKit/528.5 (KHTML, like Gecko, Safari/528.5 ) Version/4.0 Kindle/3.0 (screen 600x800; rotate)。即使 600x800 部分是正确的,我猜它是硬编码而不是从系统中读取的。所以,你是对的,这可能是系统没有正确报告屏幕尺寸。 - Ates Goral

0

这是因为 Android 状态栏和底部栏的大小不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接