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.
- Könnten Sie uns zeigen, wie Sie bestimmen
nTabID
? - Ich kann es nicht. Es kann kommen aus vielen Orten. Zum Beispiel, aus
sender.tab.id
imchrome.runtime.onMessage.addListener
oder auschrome.tabs.query({active: true, currentWindow: true}
- Ich habe vielleicht eine Lösung gefunden, um zu überprüfen, ob die Registerkarte ID vorhanden ist: stackoverflow.com/a/25831100/843732
- möglich, Duplikat der Der beste Weg, um zu überprüfen, ob die Registerkarte mit der genauen ID existiert in Chrome
- Wenn Sie möchten, stoppen Sie die Fehler, siehe stackoverflow.com/a/45603880/632951
Du musst angemeldet sein, um einen Kommentar abzugeben.
Umfassen eine Rückruf-und check chrome.- Laufzeit.lastError.
No tab with id: 12360.
alslastError.message
. Ich verstehe nicht, wie kann das passieren, wenn ich die Registerkarte ID aus einer derchrome
Funktionen?chrome.browserAction.setBadgeText()
undchrome.browserAction.setBadgeBackgroundColor()
?chrome.runtime.lastError
ist falsch.setBadgeText
undsetBadgeBackgroundColor
haben Rückrufe?browserAction.setBadgeBackgroundColor(object details)
keine Rückrufe. Ist es das, was du meintest?Put them in the callback to run if chrome.runtime.lastError is false
tab exists
BearbeitensetBadgeText
undsetBadgeBackgroundColor
in der Rückruf fürchrome.browserAction.setIcon
. Sorry, ich wollte dich nicht verstehen. Es ist eine gute Idee, lassen Sie mich versuchen.chrome.browserAction.setBadgeText()
die nicht akzeptieren Rückrufe?