2014-02-23 55 views
0

我有一個相當標準的用例,其中我有一個Chrome擴展中的popup.html和background.js。我需要做兩件事情什麼時候使用消息傳遞在鉻

  1. 當用戶點擊,在彈出的一個按鈕,讓background.js瞭解它
  2. 發送一些數據從後臺彈出

我們實現這些功能我正在考慮使用鉻擴展文檔中概述的long-lived connections。爲了這一措施,這是我

# popup.js 

var port = chrome.extension.connect({name: "LOGGERCHANNEL"}); 

function sendMessage(msg) { 
    port.postMessage(msg); 
    port.onMessage.addListener(function(msg) { 
    console.log("message recieved"+ msg); 
    }); 
} 

sendMessage("hello world"); 


# background_page.js 

chrome.extension.onConnect.addListener(function(port){ 
    console.log("Connected to Popup"); 
    console.assert(port.name == "LOGGERCHANNEL"); 


    port.onMessage.addListener(function(msg){ 
    console.log('Background got message:', msg); 
    }); 
}); 

這工作完全正常,但是,我在如何完成一個sendMessage功能background.js以及虧損。理想情況下,我想在某個事件發生時做sendMessage('hello from bg')?這將如何成爲可能?

其次,如this answer所述,我可以簡單地使用chrome.extension.getViews()chrome.extension.getBackgroundPage()來通過共享變量來完成此任務。

這是解決這類問題的推薦方法嗎?

回答

0

我想你正在嘗試做類似於背景和彈出窗口之間的get/set選項。這是我如何處理是:

popup.js

document.addEventListener('DOMContentLoaded', function() { 
    chrome.extension.sendMessage({"msg":"getOptions"}, function(response){ 
    $('#clientId').val(response.options.clientId); 
    }); 

    $("#setOptions").on("click", function(){ 
    chrome.extension.sendMessage({ 
     "msg":"saveOptions", 
     "options":{ "clientId" : $('#clientId').val() } 
    }); //sengMessage 
    }); //on 

}); //addEventListener 

background.js

chrome.extension.onMessage.addListener(function (request, sender, sendResponse) { 
    if (request.msg == "getOptions") { 
    var options = { 
     clientId : localStorage.getItem('clientId') || "" 
    }; 
    sendResponse({"msg" : "setOptions", "options" : options}) 
    } 

在某些情況下sendResponse將無法​​正常工作,即從閱讀背景頁cookie時,這樣反而使用它,你會代替sendMessage

相關問題