2011-11-07 70 views
1

我使用下面的代碼來發送從內容腳本示例消息:谷歌瀏覽器擴展 - 無法從內容腳本傳遞消息彈出頁面中相同的擴展

function sendjsontrue() 
{ 

     var arrCars = new Array("Toyota", "Mercedes", "BMW");   
      jsonStr = JSON.stringify(arrCars); 
     chrome.extension.sendRequest({greeting: jsonStr},  function(response){ 
      console.log(response.farewell); 
      }); 
     console.log("Message with header=greeting has been sent..."); 
} 

在我popup.html代碼處理由內容腳本發送的消息,被below--

<script> 
chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
    console.log(sender.tab ? 
      "from a content script:" + sender.tab.url : 
      "from the extension"); 
    if (request.greeting == "hello") 
     sendResponse({farewell: "goodbye"}); 
    else 
     sendResponse({notfarewell:"Not goodbye"}); . 
    }); 

</script> 

,我得到的是below--

Port error: Could not establish connection. Receiving end does not exist. 
chrome/EventBindings:184Error in event handler for 'undefined': TypeError: Cannot read  property 'farewell' of undefined 
at chrome-extension://nkmkgjckmjekpbghhildcfdlnbjeglkd/obtainformdata.js:81:25 
at chrome/RendererExtensionBindings:238:13 
at [object Object].dispatch (chrome/EventBindings:182:28) 
at Object.<anonymous> (chrome/RendererExtensionBindings:134:27) 
給出的錯誤給出

我做了什麼錯在這裏?

+0

我記得消息被髮送到後臺,不會彈出。您應該能夠將消息從bg轉發到彈出窗口。 – mrtsherman

回答

3

你應該寫在後臺頁面的接收器的代碼,而不是在彈出窗口。內容腳本默認與後臺頁面通信。

如果你需要體面的文件的是,看看:

+0

Huh,Rob。我今天閱讀了大量有關Chrome API的問題。不知道有多少次我看到你的名字,但你的答案無處不在!:) –

3

我有,當我是聽從選項請求同樣的問題.html。我發現以下解決方案到:

您也可以編寫代碼接收器在彈出頁面,但限制是你的請求被chrome.extension.onRequest.addListener()只聽當popup.html活躍。 所以如果u要聽請求所有的時間,你必須編寫

chrome.extension.onRequest.addListener()

背景頁面和註冊此頁的manifest.json