2012-09-19 46 views
7

我的內容腳本向background.js發送消息。在響應的回調處理程序中,我有最後一行爲"alert(alrt_msg)"。在執行的代碼,我得到的警告框,但點擊「確定」後,在紅繼鉻控制檯顯示:控制檯中的Chrome擴展程序投擲錯誤

Error in event handler for 'undefined': Cannot call method 'disconnect' of null TypeError: Cannot call method 'disconnect' of null 
    at chromeHidden.Port.sendMessageImpl (miscellaneous_bindings:285:14) 
    at chrome.Event.dispatch (event_bindings:237:41) 
    at Object.chromeHidden.Port.dispatchOnMessage (miscellaneous_bindings:250:22) 

它沒有太多的信息,但直覺我知道這個錯誤是因爲一些結構的地方就是垃圾當用戶點擊「確定」時收集。所以我把我的代碼

window.setTimeout(function() { alert(alrt_msg); } , 1);

這使得它沒有上面的錯誤工作。儘管如此,在搜索文檔或谷歌後,我無法找到背後的確切原因。有人可以解釋發生了什麼,如果文檔包含一個特定的方法來做到這一點?

+0

你的代碼是什麼?如果在'onMessage'事件監聽器的末尾插入'return true;'會怎麼樣? –

+3

我相信原因是消息響應的處理程序不會等待警報被點擊;所以當你關閉警報以允許腳本繼續時,處理程序不再存在。我不確定這是否可以被視爲一個錯誤。 – Goodwine

+0

@Goodwine,我相信你是對的。 – Methos

回答

2

我來到同一個問題。這是由於在響應處理程序中調用的函數中出現錯誤(我的代碼出錯)。

這裏是我的代碼:

在background.js - 聽音側

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    var update_msg = 'test'; 
    sendResponse({data: update_msg}); 
    return false; // -> Add this or not add this do not matter 
    }); 
} 

在發送端:

function updateObjDatabase(obj) { 
    chrome.runtime.sendMessage({data: obj}, function(response) { 
    // Update when it's done 
    update_msg_handler(response.data); 
    }); 
} 

function update_msg_handler(msg) { 
    ..... error code here 
} 

錯誤的代碼實際上是在功能update_msg_handler。但Chrome控制檯不會告訴你這些細節。如果你沒有IDE,你必須添加一些console.log來進行調試。

+0

我或多或少都有同樣的問題。所以是的,檢查你的代碼錯誤球員 –

+11

你實際上沒有在這裏解釋任何東西。你的代碼中的什麼導致這個錯誤被拋出? –

1

我有同樣的錯誤。這是iMacros的應用程序。我刪除後沒有錯誤。