При использовании javascript window.open() в системе с несколькими мониторами, как вы контролируете, какой монитор или где в пространстве экрана всплывающее окно открывается? Это кажется мне неконтролируемым и в противном случае случайным в его поведении.window.open() на системе с несколькими мониторами/с двумя мониторами - где всплывает окно?
ответ
Результат «window.open двойного экрана» поиск показал этот причудливый самородок:. Dual Monitors and Window.open
«Когда пользователь нажимает на ссылку, которая открывает новое окно с помощью window.open Make появится окно на том же мониторе, что и его родительский « ».
// 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/браузерах, только то, что рабочий стол с двумя экранами представляет собой просто увеличенную одиночную декартовую плоскость вместо двух дискретных самолеты.
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;
}
Я пытаюсь решить разместить всплывающее окно на другом мониторе, используя эту технику. Он работает как ожидается в Firefox и IE. Но в хроме он не работает. Его размещение всплывающее окно на правом краю окна. Есть идеи? –
@RumitParakhiya есть ли у вас решение? У меня такая же проблема, что он работает на firefox, но не в хроме – Heroic
@Heroic: Нет, не получил никакого решения для Chrome. Решение, упомянутое в ответе, работает на FF, но Chrome не позволяет размещать всплывающие окна таким образом из-за безопасности. В то время я пришел к официальной теме Chrome, подтверждающей это. В настоящее время URL не подходит. –
/**
* 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);
},
ФУНКЦИЯ:
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});
Он также будет работать на свернутых окон не
Это сработало отлично! Я хотел получить верхний левый угол, поэтому, я просто преувеличил то, что разделяет первая ширина и высота, а затем разделил второй (w и h) на 1. Никогда не понимал, что функция «google.com» использовалась в использовании , но обнаружил, что это может быть что угодно, пока это было что угодно. –
@drymoon Знаете ли вы, почему это открывает каждую ссылку в том же окне вместо нового? Действительно раздражает /: –
Кажется, что это только для ссылок с одним и тем же основным URL-адресом. –
Ни один из выше SOLUTIO ns работают правильно. с точки зрения точного центра,
Я попробовал это, он отлично работает для меня в хроме и светлячок
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));
Но это также вопрос, если второй мониторы браузер рассматривается в половину первого и другую половину в секунду ,
Решение на основе javascript не работает из соображений безопасности.
У меня есть еще одна идея для вас, почему бы не использовать хромированное удлинение для обработки позиционирования. (там нет проблем с безопасностью) Это, конечно, только для хром (возможно, это хорошо для вас).
История вопроса: У нас были связанные трудности. Внутренний webapp, который открывает несколько документов в окнах и должен быть размещен на других мониторах. Javascript не поддерживает это по соображениям безопасности, и только родное расширение может корректно работать с объектами tabs/windows.
Поэтому мы создали расширение chrome с открытым исходным кодом для выполнения именно этого: гибкое положение окна в настройках нескольких мониторов.
В вашем случае вы можете легко определить правило для каждого монитора, где и как оно появится. Вы можете сделать это на странице опций расширения chrome. (как вы можете, после установки, перейдите прямо туда using)
Хромовое удлинение называется «MultiWindow Positioner» и его полным свободным. Вы можете получить его в хромированной магазине here
Фактический исходный код, который вы найдете в GitHub в проекте chrome-multiwindow-positioner
Отказ от ответственности: Я сопровождающим с открытым исходным кодом (MIT) GitHub проекта. Если есть какая-то интересная идея или комментарии, не стесняйтесь делиться ими here.
«почему бы не использовать хром-расширение» ... Ну, потому что попросить случайных посетителей нашего сайта установить расширение, чтобы разместить всплывающее окно, не кажется идеальным. –
да, в этом смысле, это не будет. На самом деле это серая зона. Приложения на основе браузеров, требующие больше и больше функций, которые хотят перейти в область вкладки браузера, в то время как браузер должен защищать пользователей от проблем безопасности. Это противоречие. –
- 1. JFrame в системе с двумя мониторами
- 2. Проблема с двумя мониторами
- 3. OpenGL с двумя мониторами
- 4. Как ограничить мышь конкретным монитором на системе с несколькими мониторами?
- 5. VNC-просмотрщик с несколькими мониторами
- 6. аппаратное ускорение с несколькими мониторами
- 7. Запуск полноэкранного режима VNC с несколькими мониторами
- 8. Android Studio с несколькими мониторами
- 9. tkinter winfo_screenwidth() при использовании с двумя мониторами
- 10. 3D-приложение с несколькими мониторами
- 11. . NET полноэкранный монитор с двумя мониторами
- 12. Как использовать мультитач-приложение с несколькими мониторами?
- 13. Окно всплывает на сессии с клиентом
- 14. Почему window.open всегда всплывает с IE
- 15. Каков наилучший способ работы с несколькими мониторами?
- 16. Показать JFrame на определенном экране с конфигурацией с двумя мониторами
- 17. Расположение окна полностью на экране в среде с несколькими мониторами
- 18. проблема с родительским дочерним окном с двумя мониторами
- 19. Альтернатива GetWindowRect() для использования с несколькими мониторами?
- 20. java awt setLocationRelativeTo с несколькими мониторами p
- 21. C# Как заставить экран slpash отображаться на основном дисплее в системе с двумя мониторами?
- 22. WPF TreeView Отображение Некорректно с несколькими мониторами
- 23. Java fullscreen jframe с двумя мониторами
- 24. Почему окно не всплывает?
- 25. Определение монитора MATLAB в конфигурации с несколькими мониторами
- 26. Java и полноэкранный над несколькими мониторами
- 27. Где моя книга всплывает?
- 28. window.open (url) обгоняет окно предыдущего window.open (url)
- 29. Проверьте, всплывает ли окно всплывающее окно?
- 30. многопроцессорность в Maya всплывает окно
Ваш код является возвратом ** 'window.leftWindowBoundry не является функцией' **. Я пытаюсь в chrome 63.0.3239.132. –