2011-04-18 114 views
1

有幾個關於此問題的問題,但都沒有滿足我的需求。我創建了一個擴展,我試圖在內容腳本和我的options.html之間進行通信。我一直在嘗試使用chrome.extension.onRequest.addListenerchrome.extension.sendRequest,都沒有工作。沒有命令執行或任何事情。這裏是我的代碼:在Chrome瀏覽器擴展程序中傳遞郵件

內容腳本:

chrome.extension.sendRequest({command:value}, function(response) {}); 

options.html

chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) { 
    alert("in onRequest request.command = " + request.command); 
    decide_command(trim(request.value)); 
    sendResponse({}); 
}); 

沒有警報被執行,沒有的功能被執行。我甚至嘗試在消息傳遞API頁面中使用示例,並沒有觸發任何警報或任何事情。我嘗試了一些不同的組合,比如將擴展ID放在sendRequest中,以確保它到達正確的位置,我已經排除了sendResponse以確保它不會太快結束。除了在內容腳本中的發送請求命令之前和之後,我都有調試警報並且沒有被觸發。所以我會認爲它要麼被執行,要麼失敗或者類似的東西。任何幫助將不勝感激,我一直在這個工作好幾天。

+0

你有沒有試過在manifest.json中指定'options.html'作爲你的'background_page'?我不確定內容腳本是否可以與選項頁面進行通信。另外,'request.value'看起來像是未定義的。 – 2011-04-18 10:26:03

+0

對不起,這是一個與測試有關的問題,實際上是request.command而不是request.value我改變了我的代碼中的一些變量名稱。在我的後臺頁面中也存在相同的onRequest.addListener,所以其中一個應該得到它。 (我希望) – eric 2011-04-18 15:06:05

+0

https://code.google.com/chrome/extensions/dev/messaging.html#simple 這是我用作參考的代碼的鏈接。我甚至將代碼添加到我的頁面以查看是否有任何工作。它沒有:[ 我不知道它是否與權限或某事有關,因爲我認爲我在我的manifest.json中擁有正確的權限,但不能確定該頁面沒有指定特定的要求。 – eric 2011-04-18 15:06:46

回答

2

我相信克里斯已經注意到一個問題:擴展的選項頁並沒有一直運行,因此無法接收或生成消息。後臺頁面對於這種通信來說更好,因爲它們始終運行,始終可用,因此始終能夠響應消息。

我建議稍微修改一下你的擴展的體系結構,以便內容腳本收集相關信息並將其發送到後臺頁面。當選項頁面打開時,它可以從後臺頁面請求狀態。然後,後臺頁面負責以合理的方式維護狀態,並負責在其他分機之間來回推送信息。

這有道理嗎?

+0

是啊我明白你的意思...我會嘗試,無論是今天或明天...既不是背景頁面和選項頁面,當我在其中添加了addListener時進行響應。也許是因爲它既沒有做正確的事情呢? – eric 2011-04-20 23:53:10

相關問題