2011-05-18 74 views
1

的結果,因爲它清楚讀取,Chrome擴展:實現在點擊彈出時,我的擴展僅執行並顯示在彈出

我希望我的彈出是觸發的擴展開始。 我的擴展基本上可以在background.html中完全執行。 Background.html需要來自網頁的一些信息,所以使用消息傳遞將所需內容從contentscript.js傳遞到background.html。這是變得資源沉重的所有頁面上運行,所以我希望這個擴展只能在圖標被點擊後顯示,並顯示在popup.html,我可以直接從background.html拉動信息。

讓我知道我不清楚。

+0

你描述了它應該如何工作,但沒有說出什麼問題。你有哪些麻煩? – serg 2011-05-18 15:50:41

+0

@serg嗨Serg,我不知道如何使點擊彈出時的擴展觸發器。需要有關的信息。 – RaviTeja 2011-05-18 16:29:03

+0

*點擊彈出窗口(即點擊瀏覽器圖標時) – RaviTeja 2011-05-18 16:35:31

回答

1

檢測何時打開彈出窗口非常容易,因爲每次打開彈出窗口時都會執行其中的代碼。所以你所要做的就是在彈出代碼的開始處向背景頁面發出請求。

第二部分將按需要插入內容腳本(按照我的理解,插入到當前標籤中)。

所以整個擴展的結構應該是這樣的:

popup.html

//this will run each time popup opens 
chrome.extension.sendRequest("start", function(data) { 
    //display data received from background page through content script 
}); 

background.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if(request == "start") { 
     chrome.tabs.getSelected(null, function(tab) { 
      chrome.tabs.executeScript(tab.id, {file: "contentscript.js"}, function() { 
       //content script is injected, send a request to it 
       chrome.tabs.sendRequest(tab.id, "get_data", function(data){ 
        //content script sent response back with data we need to display in popup 
        sendResponse(data); 
       }); 
      }); 
     }); 
    } 
})); 

東西要記住的是,彈出窗口在收到數據時可能已關閉,因此您可能會這樣做需要添加一些錯誤處理。

第二個問題是避免將內容腳本兩次注入同一頁面。這可能是有挑戰性的,所以我建議如果你的內容腳本很小,那麼只需將它注入所有頁面(在清單中)。