Bei der Entwicklung einer Chrome-Erweiterung sind Sie auf ein Problem gestoßen, bei dem über chrome.tabs.query erhaltene Ergebnisse angezeigt wurden Nicht verfügbar, wenn der Code ohne Haltepunkte ausgeführt wurde. Um dieses Problem zu analysieren, werden wir uns mit der asynchronen Natur der Funktion chrome.tabs.query befassen.
Asynchrone Funktionen wie chrome.tabs.query führen ihren Code unter aus zu einem späteren Zeitpunkt, unabhängig vom Hauptausführungsablauf. In Ihrem Codeausschnitt:
// Initialize an empty array var fourmTabs = new Array(); // Initiate asynchronous `chrome.tabs.query` call chrome.tabs.query({}, function (tabs) { // Iterate over returned tabs for (var i = 0; i < tabs.length; i++) { // Store tabs in array fourmTabs[i] = tabs[i]; } });
Wenn dieser Code ausgeführt wird, wird der chrome.tabs.query-Aufruf ausgeführt und initiiert eine Anfrage, aber die JavaScript-Ausführung wird mit der nächsten Zeile fortgesetzt. Die als zweites Argument für chrome.tabs.query bereitgestellte Rückruffunktion wird nicht sofort aufgerufen.
// Print tab URLs (before callback has been called) for (var i = 0; i < fourmTabs.length; i++) { if (fourmTabs[i] != null) window.console.log(fourmTabs[i].url); else { window.console.log("??" + i); } }
Im Code oben ist das Array fourmTabs bei Ausführung der Schleife noch leer, da die Rückruffunktion dies getan hat noch nicht angerufen. Daher gibt die Konsole „??“ aus. für jede Registerkarte.
Mit Haltepunkten wird die Ausführung des Codes angehalten, sodass die Rückruffunktion das Array fourmTabs ausführen und aktualisieren kann. Dadurch wird sichergestellt, dass die zweite Schleife Zugriff auf die aktualisierten Tab-Informationen hat und die URLs korrekt druckt.
Um dieses Problem zu beheben und sicherzustellen, dass die Tabs verfügbar sind, wenn der Code ohne ausgeführt wird Haltepunkte verschieben Sie die zweite Schleife innerhalb der Rückruffunktion von chrome.tabs.query. Dadurch wird sichergestellt, dass die Schleife ausgeführt wird, nachdem der Rückruf aufgerufen wurde:
// Initialize an empty array var fourmTabs = new Array(); // Initiate asynchronous `chrome.tabs.query` call chrome.tabs.query({}, function (tabs) { // Update `fourmTabs` array for (var i = 0; i < tabs.length; i++) { fourmTabs[i] = tabs[i]; } // Print tab URLs (after callback has been called) for (var i = 0; i < fourmTabs.length; i++) { if (fourmTabs[i] != null) window.console.log(fourmTabs[i].url); else { window.console.log("??" + i); } } });
Mit dieser Änderung wird der Code korrekt ausgeführt, ohne dass Haltepunkte erforderlich sind, da die zweite Schleife erst ausgeführt wird, nachdem das Array fourmTabs aufgerufen wurde wurde durch die Callback-Funktion aktualisiert.
Das obige ist der detaillierte Inhalt vonWarum erscheinen die Tab-Informationen meiner Chrome-Erweiterung ohne Haltepunkte leer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!