2013-05-07 9 views
10

Próbuję wysłać wiadomości między contentscript i background script jak poniżejDwukierunkowa komunikacja wraca błąd w Chrome Extension

ContentScript.js

chrome.extension.sendMessage({ type : "some" }, function(response) { 
    anotherFunction(response.data); 
    return true;   
}); 
function anotherFunction(data){ 
    // Some code here 
    chrome.extension.sendMessage({ type : "someOther" }, function(response) { 
     console.log(response.data); // Failed to get Response 
     return true;  
    }); 
} 

Background.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
    switch(request.type){ 
     case "some": 
      sendResponse({ data : "Some Response" }); 
      return true; 
     break; 
     case "someOther": 
      // Here I am getting an error. Error is given below 
      sendResponse({ data : "Some Response" }); 
     break; 
    } 
}); 

Błąd
Nie można wysłać odpowiedzi: Program nasłuchujący chrome.runtime.onMessage musi zwrócić wartość true, aby wysłać odpowiedź po odsłuchaniu przez odbiorcę:

Jak mogę rozwiązać ten problem?

+2

Czy próbowałeś dodać "return true" w swoim drugim "przypadku", tak jak sugeruje komunikat o błędzie? – apsillers

+1

@appillers Tak, to działa dobrze. Musiałem umieścić zwrot w dwóch miejscach, ale umieściłem tylko jedno miejsce. To był problem. Dzięki za wskazanie. Czy mógłbyś to opublikować jako odpowiedź, abym mógł ją zaakceptować. – Exception

Odpowiedz

20

To powinno go naprawić:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
    ... 
    return true; //Important 
}); 

w Twoim przypadku zapomniałeś dodać zwrot w drugim case.

Powiązane problemy