2012-02-15 61 views
14

我发现到现在的唯一方法,是获得offsetWidth检测屏幕DPI,与height和一英寸的width测试div元素的offsetHeight: http://www.infobyip.com/detectmonitordpi.php如何使用JavaScript

有没有一种方法来检测屏幕DPI通过JavaScript代替?

谢谢,

Atara。

+0

这将取决于显示器DPI是否在第一时间被精确校准。 – Quentin 2012-02-15 11:06:22

+0

那是_is_一个JavaScript函数,不是吗? :) – AKX 2012-02-15 11:08:00

+1

你所描述的方法是我能想到的在JavaScript中做的唯一明智的方式。至于PHP,它最终所做的就是渲染文本。它不知道或关心客户如何显示该文本。记住字面上任何东西都可以连接到您的Web服务器并请求一个PHP页面,其中一些甚至根本没有图形显示(googlebot,curl会话,行模式浏览器和屏幕阅读器等) – GordonM 2012-02-15 11:09:39

回答

11
<div id='testdiv' style='height: 1in; left: -100%; position: absolute; top: -100%; width: 1in;'></div> 
<script type='text/javascript'> 
    dpi_x = document.getElementById('testdiv').offsetWidth; 
    dpi_y = document.getElementById('testdiv').offsetHeight; 
</script> 

然后你可以使用jQuery发送dpi_xdpi_y这对您的服务器

http://jsfiddle.net/sxfv3/

+0

这是来自我找到的链接的代码。没有一个简单的函数来返回这个值? – Atara 2012-02-15 11:22:25

+0

是的,它来自你的链接。我想没有定义的JavaScript函数来返回你的DPI。但是这个解决方案也很容易 – Lixas 2012-02-15 11:53:30

+0

我认为这个解决方案是最值得信赖的解决方案。 – 2012-10-21 06:04:55

21

在Webkit中,如果您的用户能够通过简单有一个所谓的“高dpi屏幕”可以检测从window.devicePixelRatio中检索值。

正常的dpi屏幕将返回1. iPhone 4将返回2,但数字如1.8或2.12也是可能的。

+2

即使这还不是标准(尚未),它现在支持Firefox(截至18.0)以及Opera和Opera Mobile - 但仍然不是IE浏览器,当然有些人没有最新的浏览器 – abarnert 2013-01-11 23:50:53

+0

不完美,但一个很好的指针。谢谢,+1 :) – Archer 2013-06-10 15:13:06

4

到目前为止,还没有标准和支持的解决方案。

window.devicePixelRatio,正如laurens peeters所建议的那样,如果您不关心IE或从古代的任何浏览器(如2013年1月初)(例如Firefox 17),都可以正常工作。

请参阅如何得到这个信息,2012年年底的Cross Browser Retina/High Resolution Media Queries(和各种评论和链接有),但你必须保持再次搜索,并且调整你的代码,每隔一段时间,直到事情终于得到规范,在每个浏览器中都实现了,而且广泛使用的版本可以停止关注旧版本......

+3

dpr与DPI不同。 dpi =每英寸有多少像素。 dpr =像素与屏幕的比率。除了高密度设备以外,其中大部分是1。 – 2013-08-17 20:20:52

+0

你可以像这样得到dpr的DPI:DPI = 96 * dpr。在浏览器中(并且仅在浏览器中),96的DPI是1的dpr。在某些时候某人决定(以及其余部分),96px在浏览器中为1英寸(这是一件好事,只要你可以访问dpr)。在Windows 10和4K显示器上正确返回2.5的dpr。我会认为,正确的dpr也会返回FullHD屏幕(这取决于您操作系统中的DPI设置,而不是您的屏幕分辨率) – 2017-05-23 05:42:26