window.devicePixelRatio在IE 10 Mobile中不起作用?

时间:2013-05-05 10:16:12

标签: javascript internet-explorer internet-explorer-10

我使用的是window.devicePixelRatio,适用于Android和Iphone,但在IE 10 Windows Mobile中无效。任何替代方案?

4 个答案:

答案 0 :(得分:17)

对于桌面和移动设备的IE后备,请使用:

window.devicePixelRatio = window.devicePixelRatio || 
                          window.screen.deviceXDPI / window.screen.logicalXDPI;

答案 1 :(得分:7)

window.devicePixelRatio = window.devicePixelRatio || 
Math.round(window.screen.availWidth / document.documentElement.clientWidth)

来自http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/11/08/internet-explorer-10-brings-html5-to-windows-phone-8-in-a-big-way.aspx

答案 2 :(得分:3)

我发现在诺基亚Lumia 1230上,属性window.devicePixelRatio返回1,即使该值明显不正确。测试window.screen.deviceXDPI / window.screen.logicalXDPI返回1.52083333。 所以首先使用window.devicePixelRatio不是一个好主意。

我建议如下:

function getDevicePixelRatio (){
    var pixelRatio = 1; // just for safety
    if('deviceXDPI' in screen){ // IE mobile or IE
        pixelRatio = screen.deviceXDPI / screen.logicalXDPI;
    } else if (window.hasOwnProperty('devicePixelRatio')){ // other devices
        pixelRatio = window.devicePixelRatio;
    }
    return   pixelRatio ;
}

出于某种原因,使用最佳方法测试屏幕对象中是否存在deviceXDPI:

    if(screen.hasOwnProperty('deviceXDPI')) {// IE mobile or IE

无法在此手机上使用。

答案 3 :(得分:2)

实际上,之前的答案都不正确。以下所有测试均在具有480 * 800的LCD屏幕的Lumia 520电话上进行:

WP8 / IE Mobile 10:

  • window.devicePixelRatio = undefined
  • window.inner / outerWidth / Height = 320 * 485
  • screen。[avail] Width / Height = 330 * 549
  • document.body.clientWidth / Height = 320 * 486
  • screen.device / logicalXDPI = 140/96 = 1.45833 ..

预期的devicePixelRatio 480/320 = 1.5 ,可以通过以下方式计算:

Math.round(screen.availWidth * screen.deviceXDPI / screen.logicalXDPI / 4) * 4 / document.body.clientWidth

(获得有效的LCD屏幕尺寸需要进行舍入)

WP8.1 / IE Mobile 11:

  • window.devicePixelRatio = 1.42177 ...
  • window.outerWidth / Height = 338 * 512
  • window.innerWidth / Height = 320 * 485
  • screen。[avail] Width / Height = 338 * 563
  • document.body.clientWidth / Height = 320 * 486
  • screen.device / logicalXDPI = 136/96 = 1.4166 ..

预期的devicePixelRatio(再次) 480/320 = 1.5 ,可以通过以下方式计算:

Math.round(screen.availWidth * window.devicePixelRatio / 4) * 4 / document.body.clientWidth

因此,即使存在window.devicePixelRatio,它也会为您提供DOM屏幕大小与LCD屏幕大小之间的比率,但DOM屏幕大小大于可用的视口大小。如果您想知道CSS像素和设备像素之间的确切比例,那么您必须进行上述计算。此外,这些计算在纵向模式下有效。在横向模式下,使用screen.availHeight(在IE Mobile上,方向更改时DOM屏幕尺寸不会改变)。