Chrome-Erweiterung-Fehler: “Ungeprüft Laufzeit.lastError während der Ausführung browserAction.setIcon: Keine tab mit der id"

Ich bin Codierung meinem Google-Chrome-Erweiterung, wo ich die app-Symbol aus der hintergrund Skript als solche:

try
{
    objIcon = {
        "19": "images/icon19.png",
        "38": "images/icon38.png"
    };

    chrome.browserAction.setIcon({
        path: objIcon,
        tabId: nTabID

    });
}
catch(e)
{
}

Beachten Sie, dass umwickelte ich den Aufruf in ein try/catch-block.

Immer noch, manchmal bin ich immer folgende Meldung in der Konsole:

Ungeprüft Laufzeit.lastError während der Ausführung browserAction.setIcon: Nein
tab mit der id: 11618.

Es ist schwer zu Debuggen dieser Fehler, denn es scheint zu kommen nur wenn ich in der Nähe oder laden Sie die Chrome-tab, es muss nicht eine Zeilennummer oder eine info für mich zu verfolgen, außerdem ist es nicht leicht zu laufen durch einen debugger (d.h. ich kann nicht setzen Sie einen break-Punkt auf den moment, wenn der Fehler Auftritt, aber wenn ich blind Satz einen break-point auf der chrome.browserAction.setIcon() Linie, ich sehe keine Meldung in der log nicht mehr.)

So, ich bin mal gespannt, ob jemand vermuten könnte, wie um diesen Fehler zu beheben?

BEARBEITEN: Gerade zu nach einem update. Ich bin noch nicht in der Lage dieses Problem zu beheben. Der Vorschlag vorgeschlagen von @abraham unten bietet eine etwas arbeiten Ansatz, aber es ist nicht fail safe. Zum Beispiel, in einer situation, wenn die Registerkarte geschlossen wird, die ich aufrufen kann seine vorgeschlagene chrome.browserAction.setIcon() das kann gelingen, wenn die Registerkarte noch nicht geschlossen ist, aber während in seiner callback-Funktion die tab-vielleicht irgendwann schließen und so eine beliebige aufeinander folgende Anrufe an eine andere API, die erfordert, dass gleiche tab-ID, sagen setBadgeBackgroundColor() können immer noch geben Sie mir das gleiche No tab with id Ausnahme. In anderen Worten, für diejenigen, die wissen native Programmierung, dies ist eine klassische race-condition situation. Und ich bin mir nicht sicher ob es ein bug in Chrome, denn offensichtlich JS bietet keine thread-Synchronisation von Methoden...

Ich miterlebt habe dieses Verhalten mehrmals während meiner tests. Es geschieht nicht oft, denn wir reden über eine sehr genaue timing-situation, aber es kann passieren. Also wenn jemand eine Lösung gefunden, poste es bitte unten.

InformationsquelleAutor c00000fd | 2014-09-09
Schreibe einen Kommentar