// Pops a window relative to the current window position
function popup(url, winName, xOffset, yOffset) {
var x = (window.screenX || window.screenLeft || 0) + (xOffset || 0);
var y = (window.screenY || window.screenTop || 0) + (yOffset || 0);
return window.open(url, winName, 'top=' +y+ ',left=' +x))
}
Llámelo como el siguiente y se abrirá en la parte superior de la ventana actual
popup('http://www.google.com', 'my-win');
O que sea ligeramente desplazado
popup('http://www.google.com', 'my-win', 30, 30);
El punto es que la ventana. screenX/screenLeft le da la posición en relación con todo el escritorio, no solo el monitor.
window.screen.left sería el candidato ideal para darle la información que necesita. El problema es que se establece cuando la página se carga y el usuario puede mover la ventana al otro monitor.
más investigación
una solución definitiva a este problema (más allá de la compensación de la posición de la ventana actual) requiere el conocimiento de las dimensiones de la pantalla que está en la ventana. Dado que el objeto de la imagen no se actualiza como el usuario mueve una ventana, necesitamos crear nuestra propia forma de detectar la resolución de pantalla actual. Esto es lo que ocurrió con
/**
* Finds the screen element for the monitor that the browser window is currently in.
* This is required because window.screen is the screen that the page was originally
* loaded in. This method works even after the window has been moved across monitors.
*
* @param {function} cb The function that will be called (asynchronously) once the screen
* object has been discovered. It will be passed a single argument, the screen object.
*/
function getScreenProps (cb) {
if (!window.frames.testiframe) {
var iframeEl = document.createElement('iframe');
iframeEl.name = 'testiframe';
iframeEl.src = "about:blank";
iframeEl.id = 'iframe-test'
document.body.appendChild(iframeEl);
}
// Callback when the iframe finishes reloading, it will have the
// correct screen object
document.getElementById('iframe-test').onload = function() {
cb(window.frames.testiframe.screen);
delete document.getElementById('iframe-test').onload;
};
// reload the iframe so that the screen object is reloaded
window.frames.testiframe.location.reload();
};
Así que si quería que abra siempre la ventana en la parte superior izquierda de cualquier monitor de la ventana está en, usted podría utilizar el siguiente:
function openAtTopLeftOfSameMonitor(url, winName) {
getScreenProps(function(scr){
window.open(url, winName, 'top=0,left=' + scr.left);
})
}
ni uno solo de estos trabajos 'soluciones' para mí. Encontraste alguna forma. – oma
@oma he proporcionado una solución que funciona para mí, respondió en esta publicación: http://stackoverflow.com/questions/6911138/position-javascript-window-open-centered-on-secondary-screen/14269826# 14269826 –
deberías haberlo publicado aquí en su lugar. El otro es un dup y este hilo tiene un contexto más relevante. – oma