如何获得屏幕的物理尺寸(即以英寸为单位)?

Fel*_*lix 16 javascript dimension

我试图弄清楚如何通过Javascript获取设备屏幕的物理尺寸.到目前为止,我的结论是,它目前是不可能的,但我希望有人可以证明我错了:).

到目前为止,我已经尝试通过查找设备的DPI来获取此信息,但似乎没有办法在这里获得正确的值,因为我测试的所有设备(一些HDPI和XHDPI Android设备,iPhone4S,iPad 2和iPad 3)报告96DPI.

获得我尝试过的DPI的第一种方法是你可以在互联网上随处找到的方法:div用CSS宽度创建一个1in,得到它clientWidth或者offsetWidth你的DPI.不起作用,所有设备报告96.

第二种方法是使用分辨率媒体查询,类似于:

for (var i=90; i < 400; i++) {
    if (matchMedia('(resolution: ' + i + 'dpi)').matches) {
       return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这是一个聪明的解决方案,但不幸的是,它也会返回96.

还有什么可以尝试的吗?

ric*_*ter 12

96"DPI"是一个与现实无关的网络标准.它测量的英寸最好被认为是"逻辑"英寸,它对应于字体度量和CSS测量(可以包括点和英寸).排版中的"点"定义为1/72英寸,但屏幕停止时始终为72 DPI.因此,现在所有的CSS点真正意味着96点字体高72像素.(这是合乎逻辑的像素,因为这个问题现在被hi-DPI屏幕进一步混淆了.)

无论如何,大多数本机操作系统都不知道他们真正的物理屏幕尺寸,所以他们甚至没有关于这样的信息,他们可以通过浏览器向Web应用程序公开.你问的是不可能的.

  • 当然,所有现代操作系统都非常了解输出设备的物理大小。即使是陈旧且尘土飞扬的Windows-3.1,至少也要在其数据结构中提供必要的字段来表示它(当然,它也可以与打印机一起使用)。由于在显示器连接中引入了DDC,因此计算机显示器会报告其物理屏幕尺寸,并将其与像素密度一起转换为物理分辨率。当然,如果软件确实使用了该信息,那就另当别论了。但是,尽管如此,信息已经在所有主要的操作系统中使用了很长时间了。 (3认同)