2013-10-14 144 views
0

我正在一個非常簡單的瀏覽器擴展,但不能讓消息傳遞工作: 我可以發送消息,但答覆從未交付!Chrome擴展消息傳遞沒有響應

我的代碼: 它主要來自browserActions教程,內容教程(manifest)和消息傳遞API定義。

的manifest.json:

{ 
    "manifest_version":2, 
    "name": "FUN SCRIPT", 
    "version": "1", 
    "description": "THIS IS SOME FUN SCRIPT", 
    "browser_action": { 
    "name": "Fun", 
    "icons": ["icon.png"], 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    }, 
    "content_scripts": [ { 
    "js": [ "jquery.js", "background.js" ], 
    "matches": [ "http://*/*", "https://*/*"] 
    }], 
} 

background.js

chrome.runtime.onMessage.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"}); 
    }); 

popup.js

document.addEventListener('DOMContentLoaded', function() { 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) { 
     console.log(response.farewell); 
     }); 
    }); 
}); 

popup.html

<!doctype html> 
<html> 
    <head> 
    <title>Getting Started Extension's Popup</title> 
    <style> 
     body { 
     min-width: 357px; 
     overflow-x: hidden; 
     } 

     img { 
     margin: 5px; 
     border: 2px solid black; 
     vertical-align: middle; 
     width: 75px; 
     height: 75px; 
     } 
    </style> 
    <script src="popup.js"></script> 
    </head> 
    <body> 
    </body> 
</html> 

回答

0

由於從彈出窗口到內容腳本的消息在加載彈出窗口時發送,因此請務必重新加載頁面以確保內容腳本已加載。否則,你可能會收到以下錯誤:

Could not establish connection. Receiving end does not exist. 

這就是說,我試過你提供的東西,它的工作原樣。由於您的輸出是在popup.js中,因此響應位於彈出窗口的控制檯輸出中。您可以通過右鍵單擊瀏覽器操作圖標並選擇「檢查彈出窗口」來查看它。

+0

我不認爲這是真的,因爲消息被傳遞到內容腳本(並從內容腳本中獲取console.log),但響應不起作用。另外:當我點擊browserAction按鈕時觸發該動作。這是在內容加載後! –

+0

好的,我試了一下,它確實與你提供的一樣。我加載了擴展名,檢查了彈出窗口,並看到「Receiving end does not exist」錯誤。我重新加載了一個頁面來加載內容腳本,然後重新檢查了彈出窗口,並看到了預期的控制檯輸出。 –

+0

非常有趣..我雖然它也應該工作。但我沒有看到響應的控制檯輸出.. –

相關問題