您可以使用以下javascript函数来获取DPI.
<script type="text/javascript">
var dpi = {
v: 0,
get: function (noCache) {
if (noCache || dpi.v == 0) {
e = document.body.appendChild(document.createElement('DIV'));
e.style.width = '1in';
e.style.padding = '0';
dpi.v = e.offsetWidth;
e.parentNode.removeChild(e);
}
return dpi.v;
}
}
alert(dpi.get(true)); // recalculate
alert(dpi.get(false)); // use cached value
</script>
Run Code Online (Sandbox Code Playgroud)
但是,我认为它总会96在Windows机器上返回.
据我所知,操作系统无法确定视口的实际物理尺寸.因此,很可能软件实际上不可能知道真实的DPI.
然而,专业人士是某些分支机构确保屏幕上的DPI与现实生活中的DPI相匹配.在这种情况下,上述javascript可能就足够了.
注意:
在WinXP和Win2k上的Opera 9,IE6和7以及Firefox 3.6中测试了上述代码.
更新:
添加了noCache参数.但我怀疑它会产生什么影响.我在上面提到的Windows版本中使用放大FireFox和Opera进行测试,并且无论缩放量如何,它们都会将DPI引用为"96".看看移动设备对此有何看法会很有趣.
你可以像旧的绘图包那样做,并显示一个可伸缩的标尺.让您的用户拖动虚拟标尺,直到它与他们放在屏幕上的物理标尺相匹配.
对生产使用不是一个严肃的建议,但可能是实际得到正确答案的唯一方法:(.