3

So konnte ich nichts finden, das über die Verwendung von Chrome * oder Browser * speziell gesprochen. In einigen WebExtension-Beispielen verwendet es Browser. * (browser.runtime.getManifest();) https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/getManifest, und in anderen verwendet es Chrom. * (chrome.notifications.create), https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/notifications.Firefox/Chrome/MS Edge-Erweiterungen mit Chrom. * Oder Browser. *

Ich bin mir nicht ganz sicher, was der Unterschied ist. Ist es kontextuell? Sowohl chrome. * Als auch browser. * Sind in meinem Inhaltsskript und im Hintergrundskript in Firefox verfügbar. Ich schaute auch auf IEs Dokumente und sie verwenden Browser. * (Sah nicht Chrom. * In ihren Dokumenten)

Ich würde gerne wissen, was der Unterschied zwischen und Chrome-Erweiterungen verwenden nur Chrom. * Oder hat es auch Browser. * (hat IE nur Browser. *)?

+0

Sehr verwandt, möglicherweise ein Duplikat: [Verwenden von chrome.tabs vs browser.tabs für Browser-Kompatibilität] (http://stackoverflow.com/questions/39544625/using-chrome-tabs-vs-browser-tabs-for- Browser-Kompatibilität) – Makyen

Antwort

4

Chrome hat nur chrome.apis. Edge hat nur browser.apis. Firefox hat sowohl browser.apis als auch chrome.apis für die Kompatibilität mit vorhandenen Chrome-Erweiterungen.

Der Hauptunterschied ist, dass in Firefox die browser.apis Versprechungen verwendet, aber die chrome.apis Callbacks verwendet.

+0

Chrome's chrome.apis verwendet auch Callbacks? Ich habe auch schnell nachgeschlagen Edge's browser.storage, es verwendet keine Versprechungen? https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9420301/ Grundsätzlich bin ich dabei, wie man es am meisten Cross-Browser-kompatibel macht, ohne jedes JS zu wechseln Datei wo der * .api zwischen den verschiedenen Browsern aufgerufen wird oder wird das sowieso passieren? –

+0

Zu beachten, ich entwickle in Firefox und verwende seine Versprechen vom Browser. *. –

+1

@KnightYoshi, Wenn Sie Cross-Browser-Kompatibilität verwenden möchten, verwenden Sie 'chrome. *', Nicht 'browser. *' Es ist relativ einfach, von 'chrome. *' (Callback) -Anrufen zu ihren 'browser. *' (Promise) -Äquivalenten zu füllen . Es ist schwierig, das Umgekehrte auszuführen, da die Callback-Funktionsinformation in dem API-Aufruf nicht vorhanden ist, wenn Sie eine API "browser. *" Aufrufen. Auch wenn Sie kein Polyfill verwenden, können Sie mit "chrome. *" Chrome und Firefox verwenden. zusammen diese beiden geben Ihnen die Mehrheit des Marktes (Sie können für den Rest polyfill). – Makyen

0

Ich denke, Ihre beste Lösung für den Moment ist es, Rückrufe anstelle von Versprechen zu verwenden, wie sie für Chrome, Firefox und Edge arbeiten. Zusätzlich können Sie etwas wie browser = browser || chrome; verwenden, um das Chrome vs Browser Problem und browser.runtime.lastError; für die Fehlerbehandlung zu lösen. Firefox unterstützt sowohl die Callback- als auch die Promise-Version der API, die Callback-Version funktioniert sowohl für die Chrome- als auch für die Browser-Objekte.

1

Sowohl Browser- als auch Chrome-APIs funktionieren in Edge, stellen Sie jedoch sicher, dass Sie nicht mischen und übereinstimmen. Benutze alles von dem einen oder anderen.

+0

Danke, dass du mich das wissen lässt. Ja, wir mischen sie nicht. Wir wickeln die Browser-APIs tatsächlich mit unserem eigenen Code ab. Wenn wir also ändern müssen, wie es funktioniert, funktioniert unser Code immer noch mit dem, was wir austauschen. –

Verwandte Themen