2012-09-19 23 views
7

Mój skrypt zawartości wysyła wiadomość do pliku background.js. W procedurze obsługi wywołania zwrotnego miałem ostatnią linię jako "alert(alrt_msg)". Po wykonaniu kodu, pojawia się okno alertu, ale po kliknięciu „OK”, na wyświetlaczu konsoli chrom idąc czerwony:Błąd wyrzucania przez rozszerzenie Chrome w konsoli

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) 

Jego nie wiele pouczające ale intuicyjnie wiedziałem, że to błąd, ponieważ niektóre struktury gdzieś jest śmieci zbierane, gdy użytkownik kliknie "OK". Włożyłem więc mój kod jako

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

Pozwoliło to działa bez powyższego błędu. Mimo to, po wyszukaniu dokumentacji lub google, nie byłem w stanie znaleźć dokładnego powodu tego. Czy ktoś może wyjaśnić, co się dzieje i czy dokumentacja zawiera konkretny sposób, aby to zrobić?

+0

Jaki jest twój kod? Co jeśli wstawisz 'return true;' na końcu detektora zdarzeń 'onMessage'? –

+3

Wierzę, że powodem jest to, że program obsługi odpowiedzi wiadomości nie czeka na kliknięcie alertu; więc po zamknięciu alarmu, aby umożliwić kontynuowanie skryptu, program obsługi już nie istnieje. Nie jestem pewien, czy można to uznać za błąd. – Goodwine

+0

@Goodwine, Wierzę, że masz rację. – Methos

Odpowiedz

2

Przyszedłem do tego samego problemu. Jest to spowodowane błędem (błąd mojego kodu) w funkcji wywoływanej w module obsługi odpowiedzi.

Oto mój kod:

W background.js - strona słuchania

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 
    }); 
} 

po stronie wysyłającej:

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 
} 

niewłaściwy kod jest faktycznie w funkcji update_msg_handler. Ale konsola Chrome po prostu nie powie Ci tych szczegółów. Musisz dodać plik console.log do debugowania, jeśli nie masz IDE.

+0

Miałem mniej więcej ten sam problem. Więc tak, sprawdź swój kod pod kątem błędów facetów –

+11

Tutaj tak naprawdę niczego nie wyjaśniłeś. Co w Twoim kodzie prowadzi do zgłoszenia tego błędu? –

1

Miałem ten sam błąd. To była aplikacja iMacros. Po usunięciu go nie wystąpił błąd.

Powiązane problemy