2013-02-18 170 views
0

我有一個標籤,除其他的東西,以下內容:Chrome擴展消息超時

<meta http-equiv="refresh" content="0; URL='whatsoever'" /> 

我也有使用這種技術註冊的每個選項卡插件運行:

chrome.tabs.onUpdated.addListener(doStuff); 

的doStuff功能發送消息到標籤:

function doStuff(tabId, changeInfo, tab){ 

    chrome.tabs.sendMessage(tabId, {'message': 'content'}, function(response){ 

     doOtherStuff(response); 

    }); 

} 

我有一個腳本註冊(這裏沒有看到),並在該腳本,發生這種情況:

function receiveMessage(request, sender, sendResponse){ 

    sendResponse({'content': 'responseData'}); 

} 

chrome.extension.onMessage.addListener(receiveMessage); 

我的問題是,由於瞬間刷新,響應時間出來,下面的錯誤出現在控制檯:

無法發送迴應: chrome.extension.onMessage監聽器必須 如果您想在監聽器返回 (消息由擴展XYZ發送)後發送響應,則返回true。

這是爲什麼,我該如何繞過這個問題?提前致謝。

+0

哪裏是你的**'doStuff()函數'**? – Sudarshan 2013-02-19 07:25:08

+0

它在background.js中,它在清單的background-> scripts部分中註冊。這是第一個代碼片段所在的文件。 – arik 2013-02-19 10:05:18

回答

0

它說,函數receiveMessage應該退出並返回true ;.只有這樣才能繼續發送消息。如果爲false,則在函數返回時中止。所以加回真

見:

當事件偵聽器返回時,除非 您從事件監聽器返回true,指示要異步發送 響應此功能失效(這將保持消息通道打到 另一端,直到sendResponse被調用)。

從DOC: https://developer.chrome.com/extensions/runtime#event-onMessage

function receiveMessage(request, sender, sendResponse){ 

    sendResponse({'content': 'responseData'}); 
    return true; 
} 

chrome.extension.onMessage.addListener(receiveMessage);