在Internet Explorer浏览器中使用Window.screen和多个显示器

9
我有一个双显示器设置,分辨率不同。当我在Chrome中访问此页面时,它显示了两个屏幕的正确分辨率。但是,在IE中,它只显示我的主屏幕的分辨率。看起来在IE中,window.screen.availWidthwindow.screen.availHeight仅返回主屏幕的值。我能否在运行Internet Explorer的第二个屏幕上获取屏幕分辨率?

我们在谈论哪个版本,最低支持的版本等等。 - Tschallacka
IE8(IE11在IE8模式下)会很好,但仅IE11也可以。 - Marcel B
1个回答

5
使用在http://archive.cpradio.org/code/javascript/dual-monitors-and-windowopen/发现的古老代码。

function FindLeftWindowBoundry()
{
 // In Internet Explorer window.screenLeft is the window's left boundry
 if (window.screenLeft)
 {
  return window.screenLeft;
 }
 
 // In Firefox window.screenX is the window's left boundry
 if (window.screenX)
  return window.screenX;
  
 return 0;
}

window.leftWindowBoundry = FindLeftWindowBoundry;

// Find Left Boundry of the Screen/Monitor
function FindLeftScreenBoundry()
{
 // Check if the window is off the primary monitor in a positive axis
 // X,Y                  X,Y                    S = Screen, W = Window
 // 0,0  ----------   1280,0  ----------
 //     |          |         |  ---     |
 //     |          |         | | W |    |
 //     |        S |         |  ---   S |
 //      ----------           ----------
 if (window.leftWindowBoundry() > window.screen.width)
 {
  return window.leftWindowBoundry() - (window.leftWindowBoundry() - window.screen.width);
 }
 
 // Check if the window is off the primary monitor in a negative axis
 // X,Y                  X,Y                    S = Screen, W = Window
 // 0,0  ----------  -1280,0  ----------
 //     |          |         |  ---     |
 //     |          |         | | W |    |
 //     |        S |         |  ---   S |
 //      ----------           ----------
 // This only works in Firefox at the moment due to a bug in Internet Explorer opening new windows into a negative axis
 // However, you can move opened windows into a negative axis as a workaround
 if (window.leftWindowBoundry() < 0 && window.leftWindowBoundry() > (window.screen.width * -1))
 {
  return (window.screen.width * -1);
 }
 
 // If neither of the above, the monitor is on the primary monitor whose's screen X should be 0
 return 0;
}

window.leftScreenBoundry = FindLeftScreenBoundry;

console.log(window.screen.width);
console.log(window.leftScreenBoundry());

console.log(window.screen.height);

虽然不是很多,但至少可以让你评估客户端是否使用双屏以及双屏的宽度。

IE唯一混乱的问题就是在所有显示器之间均匀分配分辨率。

因此,它将总宽度除以显示器数量。

我有3个显示器,2个为1920 x 1080,一个为1600 x 900,用于我的测试,IE给出的左位置为1745 0 -1745,所以IE在所有方面都存在某些问题,但希望这个小片段可以帮助您或其他人进一步为IE编写半兼容代码。


我已经找到了那段代码,但是我不能使用它。我的左屏幕分辨率是1600x900,右屏幕分辨率是1920x1080。右屏幕是我的主屏幕。window.leftScreenBoundry()返回-1920,这超出了我的桌面范围。 - Marcel B
同样的问题。这与显示器的排序等有关。你无法做太多事情。你想要实现什么? - Tschallacka
调整窗口大小。我有一些动态元素,这阻止了我让IE处理窗口大小。 - Marcel B
如果用户正在使用IE浏览器,建议他们按F11。我认为这可能是最好的解决方案,并建议升级到Edge浏览器。" 您正在使用过时的浏览器,请考虑更新您的浏览器为最新和安全的浏览器。要继续使用此应用程序,请按F11键。 - Tschallacka
1
是啊...那真的很好,但不幸的是这不是一个选项。这是一个企业环境,这些事情超出了我的控制范围。我想用户们将不得不习惯这个问题引起的奇怪行为。(Edge是否返回正确的值?我无法在这里测试) - Marcel B
@MarcelB 和 Michale:只是一个想法,CSS 的 device-width 媒体查询会受到这个 bug 的影响吗?如果它的行为正确,你们也许可以利用它来进行超级丑陋的黑客攻击。 - Alexander O'Mara

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