2011-05-19 26 views
5

Estoy creando una extensión de Chrome que tiene un archivo background.html que solicita información de una API una vez por minuto. Una vez que recibe la información, envía mensajes a popup.html con la información JSON con la que se utiliza la ventana emergente para agregar nuevos elementos HTML en el cuerpo de la ventana emergente.Impedir que se abra una extensión de Chrome popup.html

El problema es que el fondo se está ejecutando constantemente (como debería), pero emitirá un sonido emergente incluso cuando se cierre la ventana emergente. Esto hace que la ventana emergente se abra cada minuto, lo cual es muy molesto.

Quiero saber, ¿hay alguna manera de ver si la ventana emergente está cerrada y no hacer nada si ese es el caso? ¿O hay otra forma de evitar que la ventana emergente se abra sola?

Aquí está el Github repository, pero las partes importantes se resaltan a continuación.

Así es como estoy ping emergente:

// background.js 

function sendQuestions()                                              
{                                                   
    var questions = JSON.parse(db.getItem(storage));                                       
    chrome.extension.sendRequest(appid, { 'questions': questions }, function() {});                               
} 

setInterval(sendQuestions, 60e3); 

Así es como emergente lo maneja:

// popup.js 

chrome.extension.onRequest.addListener(function(request) {                                     
    if (request.questions) {                                             
     displayQuestions(request.questions);                                         
    } 
}); 

function displayQuestions(questions)                                           
{  
    for (i = 0; i < questions.length; i++) {                                         
     var question = questions[i]; 
     var htmlBlock = // ... generate a block of html ... 
     $('#container').prepend(htmlBlock); 
    } 
} 
+2

¿Puedes mostrar cómo estás haciendo pinging popup? Si provoca que se abra la ventana emergente, sería increíble, ya que AFAIK no fue posible abrirlo programáticamente antes :) – serg

+0

Agregué una variable 'isPopup = true' a popup.html y luego utilicé' getViews' de background.html, y luego verifique para cada vista si tiene la propiedad 'isPopup'. En ese caso, se abre la ventana emergente; de ​​lo contrario, no. http://code.google.com/chrome/extensions/extension.html#method-getViews – pimvdb

+0

@pimvbd La comunicación solo está entre 'popup.html' y' background.html', así que sé de quién. Sin embargo, ¿hay alguna forma de saber que la ventana emergente está cerrada desde el fondo? En ese caso, podría usar ese booleano para evitar que el fondo incluso envíe un mensaje. – theabraham

Respuesta

0

abierto un largo lived connection de la ventana emergente para el momento BACKGROUND_PAGE se abre. En background_page puede verificar si la conexión está actualmente activa. Si se pasan los mensajes necesarios, de lo contrario espere hasta que la conexión esté activa.

Cuestiones relacionadas