2011-03-17 21 views
6

Estoy usando el siguiente código para abrir una ventana emergente en una extensión de Google Chrome, mi única pregunta es, ¿cómo puedo abrir la ventana emergente en el centro de la pantalla de los usuarios?Ventana emergente, Pantalla central

<script> 
    chrome.browserAction.onClicked.addListener(function() { 
    var left = (screen.width/2)-(w/2); 
    var top = (screen.height/2)-(h/2); 
    chrome.windows.create({'url': 'redirect.html', 'type': 'popup', 'width': 440, 'height': 220, 'left': '+left+', 'top': '+top+', } , function(window) { 
    }); 
}); 
    </script> 

También he intentado esto, lo que no ha tenido tanta suerte.

<script> 
    chrome.browserAction.onClicked.addListener(function() { 
    chrome.windows.create({'url': 'redirect.html', 'type': 'popup', 'width': 440, 'height': 220, 'left': (screen.width/2)-(w/2), 'top': (screen.height/2)-(h/2), } , function(window) { 
    }); 
}); 
    </script> 
+0

Un problema que veo: ¿Qué son w y h? No están definidos en ningún fragmento –

+0

@Matt S. Pensé que estaban definidos por: ** "ancho": 440, "alto": 220, ** – itsdaniel0

Respuesta

13

Cuando ve var obj = {property: value} estructura en JS es una creación de objeto. En su código, está intentando pasar un objeto que contiene propiedades de ventana a la función chrome.windows.create().

código correcto debería ser:

chrome.browserAction.onClicked.addListener(function() { 
    var w = 440; 
    var h = 220; 
    var left = (screen.width/2)-(w/2); 
    var top = (screen.height/2)-(h/2); 

    chrome.windows.create({'url': 'redirect.html', 'type': 'popup', 'width': w, 'height': h, 'left': left, 'top': top} , function(window) { 
    }); 
}); 
+0

¡Honestamente, no puedo agradecerles lo suficiente! Gracias – itsdaniel0

+0

@ itsdaniel0 Usted es bienvenido :) – serg

+1

chrome.windows.create espera que 'arriba' y 'izquierda' sean enteros, así que asegúrese de utilizar Math.round() antes de pasar los parámetros. – holmberd

1

Como una adición a esta respuesta, si desea recuperar las dimensiones emergentes de localStorage - que se guardan como cadenas - esto va a convertir las variables necesarias para los números enteros para que el pop-up funcione

var w = parseInt(localStorage.getItem('key')); 
var h = parseInt(localStorage.getItem('key')); 
1

Si desea el centrado de trabajar también con un monitor dual, que necesita para obtener el objeto de ventana actual de la extensión y el centro de su emergente con respecto a eso. De este modo:

chrome.browserAction.onClicked.addListener(function() { 
    chrome.windows.getCurrent(function(win) { 
     var width = 440; 
     var height = 220; 
     var left = ((screen.width/2) - (width/2)) + win.left; 
     var top = ((screen.height/2) - (height/2)) + win.top; 

     chrome.windows.create({ 
      url: 'redirect.html', 
      width: width, 
      height: height, 
      top: Math.round(top), 
      left: Math.round(left), 
      type: 'popup' 
     }); 
    }); 
    }); 

chrome.windows.create espera un entero para top y left, lo que se recomienda para envolver esos valores en Math.round.

Cuestiones relacionadas