Unterschiede zwischen API-Implementierungen

Die API für Browsererweiterungen ist ein aufkommender Standard. Daher gibt es, obwohl sie von den meisten großen Browsern – einschließlich Firefox, Chrome, Edge und Opera – unterstützt wird, Unterschiede zwischen den verschiedenen Implementierungen. Das bedeutet, dass einige Änderungen erforderlich sein können, um Ihre Erweiterung für mehrere Browser zu implementieren.

Unter den verschiedenen Browsern, die die Erweiterungen API unterstützen, ist Firefox am konformsten mit dem aufkommenden Standard und daher der beste Ausgangspunkt für die Entwicklung von Browsererweiterungen.

Die Unterschiede zwischen den API-Implementierungen der Browser fallen in vier Bereiche: Namensraum, asynchrone Ereignisbehandlung, API-Abdeckung und Manifest-Schlüssel.

Namensraum

Sie verweisen auf alle Funktionen der Erweiterungen API unter Verwendung eines Namensraums. Zum Beispiel erstellt browser.alarms.create({delayInMinutes}); in Firefox einen Alarm, der nach der in delayInMinutes angegebenen Zeit ausgelöst wird.

Es gibt zwei verwendete API-Namensräume:

  • chrome wird in Chrome, Edge und Opera verwendet.
  • browser wird in Firefox und Safari verwendet.

Asynchrone Ereignisbehandlung

JavaScript bietet mehrere Möglichkeiten, asynchrone Ereignisse zu handhaben. Der vorgeschlagene Standard für die Erweiterungen API ist die Verwendung von Promises. Die Promises-Ansatz bietet erhebliche Vorteile beim Umgang mit verketteten asynchronen Ereignisaufrufen.

Firefox und Safari implementieren Promises für die Erweiterungen API. Alle anderen Browser verwenden Callbacks. In Manifest V3 wurden in Chrome, Edge und Opera für die meisten geeigneten Methoden Promises bereitgestellt. (siehe Chrome-Bug 328932)

Wenn Sie nicht damit vertraut sind, wie JavaScript asynchrone Ereignisse oder Promises handhaben kann, schauen Sie sich Getting to know asynchronous JavaScript: Callbacks, Promises and Async/Await oder die MDN-Seite Using promises an.

API-Abdeckung

Die Unterschiede in der Implementierung der Funktionen der Erweiterungen API unter den Browsern fallen in drei breite Kategorien:

  • Fehlende Unterstützung für eine gesamte Funktion.
  • Variationen in der Unterstützung von Funktionen innerhalb einer Funktion. Zum Beispiel unterstützt Firefox zum Zeitpunkt des Schreibens nicht die notification-Methodenfunktion onButtonClicked, während Firefox der einzige Browser ist, der onShown unterstützt.
  • Proprietäre Funktionen, die browser-spezifische Funktionen unterstützen. Zum Beispiel wird Containers zum Zeitpunkt des Schreibens als Firefox-spezifische Funktion durch die contextualIdentities-Funktion unterstützt.

Manifest-Schlüssel

Die Unterschiede in den unterstützten manifest.json-Schlüsseln unter den Browsern fallen in zwei breite Kategorien:

  • Erweiterungsinformationen Attribute. Zum Beispiel umfassen Firefox und Opera zum Zeitpunkt des Schreibens den developer-Schlüssel (zusätzlich zum author-Schlüssel), um Details über den Entwickler der Erweiterung aufzuzeichnen.
  • Erweiterungsfunktionen. Zum Beispiel unterstützt nur Firefox zum Zeitpunkt des Schreibens den protocol_handlers-Schlüssel (welcher webbasierte Protokoll-Handler registriert, Anwendungen, die wissen, wie bestimmte Typen von Links behandelt werden).

Weitere Informationen

Detailliertere Informationen über die Unterschiede in den unterstützten Funktionen der Browsererweiterungen API finden Sie in: