在Chrome中的第二个显示器上显示“window.open”

vmjh9lq9  于 2023-09-28  发布在  Go
关注(0)|答案(6)|浏览(187)

当我使用firefox,然后使用window.open('blah.com','blah','left=-30,top=-300');时,弹出窗口在我第一个显示器上方的第二个显示器中打开,但在Chrome中,弹出窗口只在left=0,top=0处打开。Chrome这么做有什么原因吗?我该如何解决这个问题?
谢谢你,谢谢

f87krz0w

f87krz0w1#

这是Chrome中的一个错误,当弹出窗口在辅助显示器上打开时。Chrome的人似乎说这是一个安全问题(尽管这是一个安全问题是我无法理解的)。
现在,打开一个弹出窗口上不存在的二级显示器,我可以理解是一个安全问题,但.随便吧
这里有一个链接到关于这个问题的讨论:
https://code.google.com/p/chromium/issues/detail?id=137681

holgip5t

holgip5t2#

我知道这是一个老帖子,但这是我的解决方案。只需使用screen对象的“avail*”属性:

var windowSize = {
    width: 500,
    height: 500,
};
var windowLocation = {
    left:  (window.screen.availLeft + (window.screen.availWidth / 2)) - (windowSize.width / 2),
    top: (window.screen.availTop + (window.screen.availHeight / 2)) - (windowSize.height / 2)
};
window.open(http://example.com, '_blank', 'width=' + windowSize.width + ', height=' + windowSize.height + ', left=' + windowLocation.left + ', top=' + windowLocation.top);

基本上,“window.screen.availLeft”给你其他屏幕的宽度,所以你可以添加你的正常中心计算。

rta7y2nd

rta7y2nd3#

var w = 300;
var h = 300;
var left = (window.screen.width/2)-(w/2);
var top = (window.screen.height/2)-(h/2);

var win = window.open("example.html", "_blank", 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h);
win.moveTo(left, top);

对于Chrome...

4c8rllxm

4c8rllxm4#

看看这个StackOverflow的帖子Center a popup window on screen?
几年前我对这个功能做了一点升级。

function multipleScreenPopup(url, title, w, h, centered = true, moveRight = 0, moveDown = 0, resizable = "no") {
  // 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 = 0;
  var top = 0;
  if (centered === true) {
    left = ((width / 2) - (w / 2)) + dualScreenLeft;
    top = ((height / 2) - (h / 2)) + dualScreenTop;
  } else {
    left = dualScreenLeft + moveRight;
    top = dualScreenTop + moveDown;
  }

  var newWindow = window.open(url, title, 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=' + resizable + ', width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);

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

}

// centered as of the monitor that fired on it
multipleScreenPopup('https://google.com', '_blank', 500, 500);

// move from the left and from the top
multipleScreenPopup('https://yahoo.com', '_blank', 500, 500, false, 200, 200);
qlvxas9a

qlvxas9a5#

我知道这篇文章很老了,但我也遇到过类似的问题:

var w = 300;
var h = 300;
var left = (window.screen.width/2)-(w/2);
var top = (window.screen.height/2)-(h/2);

var win = window.open("example.html", "_blank", 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);

--在Firefox中将弹出窗口居中,但在Chrome中不居中。另外,请注意,这并不在展示区之外。。

pod7payv

pod7payv6#

这种方法是可行的,尽管这种方法是实验性的,将来可能不会起作用

var screenDetails = await window.getScreenDetails()
 if (screen.isExtended && screenDetails.screens.length > 1) {
  var newWindow = window.open(
     "https://ya.ru",
     "New Window",
    `popup,width=${myWidth},height=${myHeight},left=0,top=0`
  );
  newWindow.moveTo(screenDetails.screens[1].left + myMargin, 0);
 }

相关问题