Promise-Unterstützung für die Chrome Extensions-API?

8

Ich habe in den letzten Wochen einige Browser-Erweiterungen geschrieben und bis heute dachte ich, dass eine WebExtension für Firefox in Chrome ziemlich automatisch funktionieren sollte. Also habe ich versucht, meinen Code nach Mozillas Beispielen zu schreiben.
Aber heute wurde mir klar, dass Promises in der API-Dokumentation für Chrome-Erweiterungen nicht erwähnt werden.
Ich habe Promises im gesamten Code für alle meine Extensions verwendet.

Nun, meine Frage ist, wird mein Code in Chrome funktionieren? Oder würde es funktionieren, wenn ich eine Deklaration var browser = chrome ganz oben hinzufüge?
Oder unterstützt Chrome überhaupt keine Promises für die API?
Wenn Chrome Promises für die API-Funktionen noch nicht unterstützt, wird es sie in Zukunft unterstützen?

Beachten Sie, dass mir dieses Projekt bekannt ist: Ссылка Aber ich bin nicht bereit, die Mühe zu machen, diese Bibliothek überall mit einzubeziehen. Außerdem hat es nervige Bugs.

Außerdem habe ich kein Chrom oder Chromium und kann sie aus Datenschutz- und Sicherheitsgründen nicht installieren.

    
Forivin 12.02.2017, 17:46
quelle

3 Antworten

3
  

... bis heute dachte ich, dass eine WebExtension für Firefox in Chrome ziemlich automatisch funktionieren sollte.

WebExtensions wurden unter Berücksichtigung der Abwärtskompatibilität mit Chrome-Erweiterungen erstellt. chrome.* namespace ist für unterstützte APIs verfügbar. Das Ziel ist es, die Portierung bestehender Erweiterungen auf FF zu vereinfachen, um das Ökosystem schnell zu starten.

Allerdings ignoriert Mozilla die Vorwärtskompatibilität mit browser.* namespace. Mozilla entschied sich für einen vielversprechenden Ansatz für die API, allerdings nur für diesen neuen Namespace.

  

Also meine Frage ist, wird mein Code in Chrome funktionieren?   Oder würde es funktionieren, wenn ich eine Deklaration var browser = chrome ganz oben hinzufüge?

Nein; Sie verhalten sich anders und haben unterschiedliche Signaturen. Chrome lehnt Anrufe ohne erforderliche explizite Rückrufe ab. browser.* variants wird stattdessen eine Promise ausgeben.

  

Oder unterstützt Chrome überhaupt keine Promises auf der API?
  Wenn Chrome Promises für die API-Funktionen noch nicht unterstützt, wird es sie in Zukunft unterstützen?

Wie in den Kommentaren erwähnt, wird die auf Promise basierende Neufassung der API von Chrome berücksichtigt , es wurde jedoch keine sichtbare Arbeit geleistet. Es gibt jedoch Polyfills, einschließlich des von Ihnen erwähnten . Anders als beim Umhüllen von Methoden zum Erstellen eines eigenen Polyfill gibt es keine andere Lösung.

  

Außerdem habe ich kein Chrom oder Chromium und kann sie aus Datenschutz- und Sicherheitsgründen nicht installieren.

Dann können Sie Ihre Ports trotzdem nicht richtig testen; Das ist kein guter Ansatz für Ihre potenziellen Nutzer. In diesem Fall sollten Sie besser nicht portieren.

    
Xan 02.06.2017 09:32
quelle
1

Ich habe diese Bibliothek Ссылка erstellt, um dies ohne eine allgemeine Regel wie in webextension-polyfill zu machen.

Meine Bibliothek ist eine Crossbrowser-Methode, um ein Browser -Objekt ohne Änderung des ursprünglichen Chrome / Browsers zu erstellen. Wie jQuery in alter Zeit.

Um es nur einmal zu verwenden - importieren Sie es im Hintergrundprozess und machen Sie es global für Hintergrund, dann für andere Importe (von Popup zum Beispiel) verwenden Sie Import von

( typeof browser === 'undefined' ? chrome : browser ).extension.getBackgroundPage().Browser

    
Rustam 11.06.2017 13:45
quelle
1

Ich habe nicht auf die browser API geschaut, also bin ich vielleicht offline, aber wenn der einzige Unterschied darin besteht, dass die Firefox-APIs Versprechen zurückgeben, anstatt Callbacks zu verwenden, ist chrome-promise Bibliothek könnte helfen können. Es umschließt alle API-Aufrufe, die Rückrufe in Funktionen erfordern, die stattdessen Versprechen zurückgeben.

Sie könnten dann in Chrome so etwas tun:

%Vor%

Und dann machen Versprechen Anrufe:

%Vor%     
jdunning 09.11.2017 03:56
quelle