Heim >Web-Frontend >js-Tutorial >Warum kann mein Inhaltsskript nicht auf chrome.tabs zugreifen und wie behebe ich den Fehler „Undefinierte Referenz'?
Inhaltsskripte und Chrome-APIs: Undefinierter Referenzfehler
Beim Arbeiten mit Inhaltsskripten in Chrome-Erweiterungen kann die Fehlermeldung „Lesen nicht möglich“ auftreten Eigenschaft von undefiniert“ beim Versuch, auf Chrome-APIs wie chrome.tabs zuzugreifen. Dieses Problem tritt trotz Erteilung der erforderlichen Berechtigungen im Manifest auf.
Informationen zur Verfügbarkeit der Chrome-API
Inhaltsskripte haben aus Sicherheitsgründen nur eingeschränkten Zugriff auf Chrome-APIs. Innerhalb von Inhaltsskripten kann nur auf eine ausgewählte Gruppe von APIs zugegriffen werden:
APIs wie chrome.tabs, die Browser-Registerkarten manipulieren, sind nur im Hintergrundskript (oder Service Worker in Manifest V3), Popup-Skripten und anderen Erweiterungskontexten verfügbar.
Lösung: Message Passing
Um auf Chrome-APIs zuzugreifen, die in Inhaltsskripten nicht verfügbar sind, müssen Sie Nachrichten vom Inhaltsskript an das Hintergrundskript übergeben. Das Hintergrundskript kann dann die API-Operation ausführen und die Ergebnisse an das Inhaltsskript zurücksenden.
Hier ist ein Codeausschnitt, der diesen Ansatz demonstriert:
// content script: chrome.runtime.sendMessage({ type: "getTabs" }, function(response) { console.log(response.tabs); }); // background script: chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { if (request.type == "getTabs") { chrome.tabs.query({}, function(tabs) { sendResponse({ tabs: tabs }); }); } });
Wenn Sie diesem Ansatz folgen, können Sie dies effektiv tun Greifen Sie auf Chrome-APIs zu, die in Inhaltsskripten nicht verfügbar sind, und wahren Sie dabei Sicherheit und Kapselung.
Das obige ist der detaillierte Inhalt vonWarum kann mein Inhaltsskript nicht auf chrome.tabs zugreifen und wie behebe ich den Fehler „Undefinierte Referenz'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!