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

17

我正在尝试通过Javascript获取设备屏幕的物理尺寸。到目前为止,我的结论是这是不可能的,但我希望有人能证明我错了 :).

迄今为止,我尝试通过找到设备的DPI来获取此信息,但似乎没有办法获得正确的值,因为我测试过的所有设备(一些HDPI和XHDPI Android设备、iPhone4S、iPad 2和iPad 3)都报告96DPI。

我尝试的第一种获取DPI的方法是互联网上随处可见的方法:创建一个CSS宽度为1英寸的

,获取其clientWidth或offsetWidth,然后就可以得到DPI。但是并没有起作用,所有设备都报告96。

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

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

我认为那是个聪明的解决方案,但不幸的是它也返回了96。

还有什么其他的尝试方法吗?


2
如果你还没有查看过这个帖子,我建议你去看一下。我认为这是不可能的,至少不能够非常精确地获取用户的物理屏幕尺寸。 - raina77ow
我没有比询问用户更好的想法。 - user669677
2个回答

11

96“DPI”是一个与现实关系不大的网页标准。它测量的英寸最好视为“逻辑”英寸,它对应于字体度量和CSS度量(可能包括点和英寸)。在排版中,“点”被定义为1/72英寸,但是屏幕的DPI已经停滞不前了。因此,CSS点现在真正意味着的是96点字体高度为72像素。(而这是逻辑像素,因为该问题现在进一步受到高DPI屏幕的影响。)

无论如何,大多数本地操作系统都不知道它们真正的物理屏幕大小,因此它们甚至没有有关此类信息的信息可以通过浏览器向Web应用程序公开。你所要求的是不可能的。


我在想,如果大多数操作系统不知道物理屏幕大小,那么像 MS Word 这样的应用程序如何能够在缩放到 100% 时准确地显示页面大小?另外,像 Photoshop 这样的其他应用程序几乎肯定需要知道屏幕 DPI。 - Carvellis
4
现代操作系统都清楚输出设备的物理大小。即使是旧的Windows-3.1也至少提供了必要的字段来表示它(当然可以与打印机一起使用)。自从显示连接中引入DDC以来,计算机显示器会报告其物理屏幕大小,这个信息连同像素密度一起转换成物理分辨率。当然,软件是否真正使用这些信息是另一回事。但是这些信息在所有主要的操作系统中都已经可用很长时间了。 - datenwolf
1
也许某些硬件的信息已经对操作系统可用了。但是很少有操作系统将其提供给应用程序,更少的应用程序曾经使用过它。 (没有任何网络浏览器将此信息暴露给JavaScript。) - rickster
像Word和Photoshop这样的应用程序中的“100%”视图设置基于硬编码的每英寸像素值。亲自尝试:在这些应用程序中制作一些内容,打印它,并将打印页面与视图设定为100%的屏幕并排对照。大小可能不匹配。(大多数应用程序假定72px / inch,并且大多数显示器长期以来都比这个密度更高。)即使如此,一旦您更改了屏幕分辨率或在具有不同屏幕大小和相同分辨率的不同机器/显示器上打开应用程序,它也不会匹配。 - rickster
1
@rickster,现在是2019年了。该把这些信息提供给浏览器了。 - Michael

0

看一下这篇文章。 它是用以下方式完成的:

<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi">

1
我相信这是设置DPI而不是检索它。 - Alex W
1
我本来希望通过添加这个标签,设备可以使用我问题中描述的方法之一报告正确的DPI。然而不幸的是,这并没有发生,但还是谢谢你的提示。 - Felix

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