window.open()多显示器/双显示器系统上 - 在哪里呢窗口弹出?(window.open(

2019-09-28 08:06发布

当使用JavaScript window.open()多显示器系统上,你怎么控制哪些监视器,或者在弹出打开显示空间? 似乎失去了控制,我和它的行为,否则随机的。

Answer 1:

的“window.open双屏”的搜索结果显示这个奇特金块: 双显示器和Window.open

“当用户点击,使用window.open打开一个新窗口中的链接。使该窗口出现在同一个显示器作为其父上。”

// 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;

现在,代码编写,你现在可以使用window.open打开监视器上的窗口父窗口上。

window.open(thePage, 'windowName', 'resizable=1, scrollbars=1, fullscreen=0, height=200, width=650, screenX=' + window.leftScreenBoundry() + ' , left=' + window.leftScreenBoundry() + ', toolbar=0, menubar=0, status=1');

如果成功,您可以打开相同的屏幕文件上的弹出启动它,然后用同样的努力,应该能够修改它以不同的表现。

需要注意的是,由于码的长度意味着,存在一种用于在jquery的/ JavaScript的/浏览器理解多个监视器,只有双屏幕桌面是简单地放大单直角平面,而不是两个分立的面没有内置的功能。

更新

这个链接是死了。 使用此waybackmachine链接



Answer 2:

window.screenX会给当前显示器屏幕的位置。

假设监视器宽度为1360

对于显示器1 window.screenX = 0;

为监视器2 window.screenX = 1360;

所以通过增加左侧位置与window.screenX ,弹出预期的位置打开。

function openWindow() {

    var width = 650;
    var left = 200;

    left += window.screenX;

    window.open(thePage,'windowName','resizable=1,scrollbars=1,fullscreen=0,height=200,width=' + width + '  , left=' + left + ', toolbar=0, menubar=0,status=1');    
    return 0;

}


Answer 3:

功能:

function PopupCenter(url, title, w, h, opts) {
   var _innerOpts = '';
   if(opts !== null && typeof opts === 'object' ){
       for (var p in opts ) {
           if (opts.hasOwnProperty(p)) {
               _innerOpts += p + '=' + opts[p] + ',';
           }
       }
   }
     // Fixes dual-screen position, Most browsers, Firefox
   var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
   var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;

   var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
   var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;

   var left = ((width / 2) - (w / 2)) + dualScreenLeft;
   var top = ((height / 2) - (h / 2)) + dualScreenTop;
   var newWindow = window.open(url, title, _innerOpts + ' width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);

// Puts focus on the newWindow
   if (window.focus) {
       newWindow.focus();
   }
}

用法:

PopupCenter('http://www.google.com','google.com','900','500', {toolbar:1, resizable:1, location:1, menubar:1, status:1}); 

它也将在最小化的窗口工作



Answer 4:

上述解决方案都不是正常工作。 在精确的中心而言,

我想这一点,它工作正常,我在Chrome和Firefox

var sY = screenY;
        if (sY < 0) {
            sY = 0;
        }
        var totalScreenWidth = (screenX + window.outerWidth + sY);
        if (totalScreenWidth > screen.width) {
            totalScreenWidth = totalScreenWidth / 2;
        } else {
            totalScreenWidth = 0;
        }
        windowobj.moveTo(totalScreenWidth + ((screen.width - h) / 2), ((screen.height - h) / 2));

但是,这也有问题,如果第二个显示器浏览器在第一次和第二次中另一半看到一半。



Answer 5:

基于JavaScript的解决方案并没有因为安全原因的工作。

我有另一个想法的你,为什么不使用Chrome扩展程序处理的定位。 (没有安全问题存在)这是当然的,只对铬(也许这就是对你罚款)。

背景:我们有相关的困难。 打开窗口中的多个文档内部web应用程序,并且需要被放置在其他监视器。 JavaScript的不支持此,出于安全原因,只有原生扩展可以正确地与标签/窗口对象。

因此,我们已经创建了一个开源的Chrome扩展程序正是这样做的:通过多显示器设置灵活的窗口位置。

你的情况,你可以很容易地定义每个监视器在何处以及如何它会出现一个规则。 您可以在Chrome扩展程序的选项页做到这一点。 (如shorcut你可以在安装后,直接去那里使用 )

Chrome扩展程序被称为“多窗口定位器”和它的完全自由。 您可以在Chrome网上应用店得到它在这里

你在github上找到实际的源代码项目中的铬多窗口,定位

免责声明:我是开放源码(MIT)的GitHub项目的维护者。 如果有任何有趣的想法,或评论,随时分享他们在这里 。



Answer 6:

/**
 * Display popup window in the center of the screen.
 */
function popupWindow(url, title, w, h) {
  // Use window.screenX to center the window horizontally on multi-monitor 
  // setup. 
  var left = window.screenX + (screen.width / 2) - (w / 2);
  var top = (screen.height / 2) - (h / 2);
  return window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
},


文章来源: window.open() on a multi-monitor/dual-monitor system - where does window pop up?