Всплывающая открытая позиция в Chrome
Когда я использую Firefox, а затем с помощью window.open('blah.com','blah','left=-30,top=-300');
всплывающее окно открывается на моем втором дисплее над моим первым, но в Chrome всплывающее окно просто открывается на left=0,top=0
, Есть ли причина, по которой Chrome делает это и как я могу решить проблему?
Спасибо!
8 ответов
Честно говоря, я думаю, что это ошибка в Chrome, но я не знаю, как это исправить, поскольку я сам новичок в JavaScript. Извините, я уверен, что это не тот ответ, который вы искали.
Это ошибка в Chrome, когда на дополнительном мониторе открывается всплывающее окно. Люди из Chrome, кажется, говорят, что это проблема безопасности (хотя то, как это проблема безопасности, мне не подходит).
Теперь, открыв всплывающее окно на несуществующем дополнительном мониторе, я понял, что это проблема безопасности, но... что угодно.
Вот ссылка на обсуждение по этому вопросу:
Я знаю, что это старый пост, но вот мое решение. Просто используйте свойства "util *" объекта экрана:
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" дает вам ширину других экранов, так что вы можете добавить к этому обычный расчет центра.
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...
Взгляните на этот центр сообщений Stackru - всплывающее окно на экране?
Я сделал небольшое обновление для этой функции пару лет назад.
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);
Я знаю, что этот пост старый, но у меня были похожие проблемы:
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. Кроме того, обратите внимание, это не за пределами области отображения...
Недавно я заметил, что Chrome не позволяет "скрывать" окна за пределами области дисплея по соображениям безопасности.
Это работает, хотя метод является экспериментальным и может не работать в будущем.
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);
}