2011-05-19 60 views
5

我正在創建一個Chrome擴展程序,其中包含一個每分鐘向API請求一次信息的background.html文件。一旦它收到信息,它就會通過彈出窗口用來將新的HTML元素附加到彈出窗體上的JSON信息來發送消息popup.html防止Chrome擴展程序的popup.html打開自己

問題是背景是不斷運行(因爲它應該),但它會ping彈出,即使彈出窗口關閉。這會導致彈出窗口每分鐘打開一次,這非常煩人。

我想知道,有沒有辦法查看彈出窗口是否關閉,如果出現這種情況,請不要做任何事情?還是有另一種方法來防止彈出自己的開放?

這是Github repository,但重要的部分在下面突出顯示。

這裏是我如何執行ping彈出:

// background.js 

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

setInterval(sendQuestions, 60e3); 

這裏的彈出如何處理它:

// 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

你能告訴你如何ping彈出?如果它導致彈出打開它將是真棒,因爲AFAIK是不可能以編程方式打開之前:) – serg 2011-05-19 18:17:28

+0

我添加了一個變量'isPopup = true'到popup.html,然後使用'getViews' from background.html,並且然後檢查每個視圖是否具有'isPopup'屬性。在這種情況下彈出窗口被打開,否則不會。 http://code.google.com/chrome/extensions/extension.html#method-getViews – pimvdb 2011-05-19 18:31:24

+0

@pimvbd通訊只在'popup.html'和'background.html'之間,所以我知道誰是誰。但是有沒有辦法告訴彈出窗口當前是從後臺關閉的?在這種情況下,我可以使用該布爾值來防止背景發送消息。 – theabraham 2011-05-19 18:50:00

回答

0

打開一個長lived connection從彈出到它打開BACKGROUND_PAGE隨時隨地。在background_page中,您可以檢查連接是否當前處於活動狀態。如果它傳遞必要的消息,則等待連接處於活動狀態。

相關問題