javascript - parametros - window.open new tab
window.open() en un sistema de monitores múltiples/monitores dobles: ¿dónde aparece la ventana? (6)
El resultado de la búsqueda "window.open dual-screen" reveló este nugget de fantasía: Monitores duales y Window.open
"Cuando el usuario hace clic en un enlace que abre una nueva ventana usando window.open. Haga que la ventana aparezca en el mismo monitor que su" padre ".
// 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;
Ahora que el código está escrito, ahora puede usar window.open para abrir una ventana en el monitor en el que está la ventana principal.
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'');
Si con éxito le permite abrir una ventana emergente en la misma pantalla que el documento que lo está iniciando, entonces con un esfuerzo similar, debería poder modificarlo para que se comporte de manera diferente.
Tenga en cuenta que, como lo implica la longitud del código, no hay una función integrada para comprender múltiples monitores en jquery / javascript / browsers, solo que el escritorio de pantalla dual es simplemente un plano cartesiano ampliado en lugar de dos planos discretos.
Actualizar
El enlace está muerto. Utilice este enlace de la máquina de camino
Cuando se utiliza javascript window.open () en un sistema de monitores múltiples, ¿cómo controla qué monitor o dónde se abre la ventana emergente en el espacio de visualización? Me parece fuera de control y por lo demás aleatorio en su comportamiento.
FUNCIÓN:
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();
}
}
USO:
PopupCenter(''http://www.google.com'',''google.com'',''900'',''500'', {toolbar:1, resizable:1, location:1, menubar:1, status:1});
También funcionará en ventanas minimizadas.
Ninguna de las soluciones anteriores funciona correctamente. en términos de centro exacto,
Probé esto, funciona bien para mí en Chrome y 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));
Pero esto también tiene problemas si el segundo monitor de monitores se ve la mitad en la primera y otra mitad en la segunda.
Una solución basada en javascript no funciona por razones de seguridad.
Tengo otra idea para ti, ¿por qué no usar una extensión de cromo para manejar el posicionamiento? (no hay problema de seguridad) Es, por supuesto, solo para Chrome (quizás eso sea bueno para ti).
Antecedentes: Tuvimos dificultades relacionadas. Aplicación web interna que abre varios documentos en Windows y debe colocarse en otros monitores. El javascript no admite esto, por razones de seguridad y solo una extensión nativa puede funcionar correctamente con los objetos de pestañas / ventanas.
Por lo tanto, hemos creado una extensión de código abierto para Chrome para hacer exactamente eso: posición flexible de Windows en configuraciones de múltiples monitores.
En su caso, podría definir fácilmente una regla por monitor dónde y cómo aparecería. Puedes hacerlo en la página de opciones de la extensión de chrome. (como acceso directo, puede, después de la instalación, ir directamente allí usando )
La extensión de Chrome se llama "MultiWindow Positioner" y es completamente gratuita. Puedes conseguirlo en la tienda de cromo here
El código fuente real que se encuentra en github en el proyecto chrome-multiwindow-positioner
Descargo de responsabilidad: soy el encargado del proyecto github de código abierto (MIT). Si hay alguna idea interesante, o comentarios, siéntase libre de compartirlos here .
window.screenX
mostrará la posición de la pantalla del monitor actual.
supongamos que el ancho del monitor es 1360
para el monitor 1 window.screenX = 0;
para el monitor 2 window.screenX = 1360;
window.screenX
, al agregar la posición izquierda con window.screenX
, se abrirá la ventana emergente en la posición esperada.
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;
}
/**
* 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);
},