Chrome-Erweiterungsfehler: "Ungeprüfter runtime.lastError beim Ausführen von browserAction.setIcon: Keine Registerkarte mit ID"

Ich programmiere meine Google Chrome-Erweiterung so, dass ich das App-Symbol über das @ -Zeichen setzbackground script so wie

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

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

    });
}
catch(e)
{
}

Bitte beachten Sie, dass ich den Anruf in den Try / Catch-Block eingeschlossen habe.

Noch manchmal wird die folgende Meldung im Konsolenprotokoll angezeigt:

Unchecked runtime.lastError beim Ausführen von browserAction.setIcon: Keine Registerkarte mit der ID: 11618.

Es ist schwierig, diesen Fehler zu debuggen, da er nur angezeigt wird, wenn ich den Chrome-Tab schließe oder neu lade, keine Zeilennummer oder Informationen zum Verfolgen habe und es nicht einfach ist, einen Debugger zu durchlaufen (d. H Ich kann in dem Moment, in dem ein Fehler auftritt, keinen Haltepunkt setzen, aber wenn ich blind einen Haltepunkt auf dem @ setchrome.browserAction.setIcon() line, ich sehe die Meldung nicht mehr im Log.)

So bin ich neugierig, ob jemand vorschlagen könnte, wie man diesen Fehler behebt?

BEARBEITE: Nur um ein Update zu posten. Ich kann dieses Problem immer noch nicht lösen. Der von @abraham unten vorgeschlagene Vorschlag bietet einsomewhat working Ansatz, aber es istnich ausfallsicher. Zum Beispiel kann ich in einer Situation, in der der Tab geschlossen wird, sein vorgeschlagenes @ anrufechrome.browserAction.setIcon() das kann erfolgreich sein, wenn die Registerkarte noch nicht geschlossen ist, aber während der Rückruffunktion wird die Registerkarte möglicherweise geschlossen und daher werden alle aufeinanderfolgenden Aufrufe einer anderen API, die dieselbe Tab-ID erfordert, beispielsweisesetBadgeBackgroundColor() kann mir immer noch das gleiche gebenNo tab with id Ausnahme. Mit anderen Worten, für diejenigen, die @ kenn native Programmierung, das ist ein klassischesrace condition Lage. Und ich bin mir nicht sicher, ob es ein Fehler in Chrome ist, da JS offensichtlich keine Thread-Synchronisationsmethoden anbietet ...

Ich habe dieses Verhalten bei meinen Tests mehrmals beobachtet. Es kommt nicht oft vor, weil es sich um eine sehr genaue Zeitsituation handelt, aber es kommt vor. Wenn also jemand eine Lösung findet, poste sie bitte unten.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage