Verwenden von chrome.tabs vs browser.tabs für Browserkompatibilität

8

Ich portiere meine Chrome-Erweiterung zu Firefox.

Laut MDN gibt es eine browser.tabs API, die sollte von Chrome unterstützt werden.

Allerdings ist browser kein Objekt in Chrome Stable. Zur gleichen Zeit funktioniert chrome.tabs in Firefox gut.

Ist es sicher, browser durch chrome beim Lesen der MDN-Dokumente zu ersetzen? Was ist der Grund für die Dokumentation, browser zu schreiben? Gibt es geplante Änderungen kommen?

    
hultqvist 17.09.2016, 08:27
quelle

1 Antwort

8

Hinweis: In den letzten Tagen wurden viele MDN-JavaScript-API-Seiten von chrome.* in browser.* geändert und das Versprechen von browser.* beschrieben Schnittstelle. Diese Änderungen lassen die Seiten nicht mit der API als chrome.* erwähnen. Die Änderungen werden von derselben Person innerhalb des Projekts vorgenommen, mit der ich die Änderung von browser.* zu chrome.* besprochen habe. Ich weiß noch nicht, was vor sich geht. Ich habe ihm eine E-Mail geschickt, in der er nach den Gründen für diese Änderungen gefragt wird. Ab diesem redigieren, 2016-11-02, ist es zu früh, um eine Antwort von ihm zu erwarten.

Ich bin nicht mit der Arbeit an der API beschäftigt. Aber ich habe einige Änderungen an der API-Dokumentation vorgenommen, und zwar speziell in Bezug auf WebExtensions chrome.* vs. browser.* (alle Seiten wurden geändert, um show_ chrome.* vom 2016-09-22 anzuzeigen). Ich habe mich beteiligt, weil ich auch festgestellt habe, dass die meisten WebExtensions-API-Seiten browser.* verwirrend anzeigen. Ich wollte wissen, was der Unterschied zwischen chrome.* und browser.* ist. Sobald ich es herausfand, wollte ich es für andere weniger verwirrend machen.

Die WebExtensions browser.* API gibt ein Versprechen zurück :

Das browser.* -Objekt implementiert eine Version von der API, die ein Versprechen wenn Sie beim Aufruf der API die Bereitstellung einer Rückruffunktion weglassen. Die Absicht ist, dass die tatsächliche Funktionalität für chrome.* und browser.* identisch ist. Wenn Sie der API browser.* eine Rückruffunktion bereitstellen, funktioniert sie identisch mit der API chrome.* .

  

Ist es sicher, browser durch chrome beim Lesen der MDN-Dokumente zu ersetzen?

Ja, es sei denn, in der Dokumentation werden ausdrücklich Versprechungen diskutiert. Der einzige Unterschied zwischen den beiden besteht darin, dass die Methoden browser.* eine Zusage zurückgeben, wenn beim Aufruf der API die Rückruffunktion nicht bereitgestellt wird.

  

Aus welchem ​​Grund schreibt die Dokumentation browser ?

Ich bin mir nicht sicher, warum die Dokumente ursprünglich so geschrieben wurden, dass browser.* so prominent war. Ich nehme an, dass entweder eine Konfigurationsauswahl getroffen wurde, als die Seiten generiert wurden, oder die Spezifika des Unterschieds zwischen chrome.* und browser.* zu einem frühen Zeitpunkt der Implementierung der WebExtensions API geändert wurden.

  

Gibt es einen technischen Grund, warum chrome.* ohne einen Rückruf kein Versprechen zurückgeben kann?

Der einzige Grund, auf den ich bisher gekommen bin, ist, dass die Verwendung von chrome.* zur Rückgabe von Versprechungen es unmöglich machen würde, das Vorhandensein einer obligatorischen Callback-Funktion bei der Parameterüberprüfung innerhalb der API zu überprüfen. Mit dem Namespace browser.* kann die API annehmen, dass der Aufrufer das zurückgegebene Versprechen verwendet. Daher kann mit browser.* eine Zusage zurückgegeben werden, anstatt einen Fehler zu generieren, wenn beim Aufruf der API keine obligatorische Rückruffunktion bereitgestellt wird. Dieser Grund ist jedoch Spekulation meinerseits.

Ändern der Dokumentation:

Ich stimme zu, dass es in der Syntax-Sektion und anderswo auf jeder API-Seite verwirrend ist, wenn die API-Dokumentation hauptsächlich browser.* anzeigt (z. B. in Beispielen). Ich habe darüber diskutiert, dies in der gesamten API-Dokumentation mit der Person zu ändern, die in den letzten 3 Wochen hauptsächlich für die WebExtensions-Dokumentation verantwortlich war. Er stimmt zu, dass es geändert werden sollte.

Es gibt Pläne, die Änderung vorzunehmen. Die Dokumentation wird sich in mindestens zwei Phasen ändern. Die erste besteht darin, alle WebExtensions-API-Seiten durchzugehen und den Syntax-Abschnitt zu ändern, um chrome.* zu sagen. Eine Notiz am Ende der Syntax-Sektion sagt, dass die "API auch als browser.* in einem Version, die ein Versprechen zurückgibt ." Darüber hinaus wird die gesamte Verwendung von browser.* auf der gesamten Seite in chrome.* geändert, mit Ausnahme der Teile, die speziell die API zeigen, die als Versprechen verwendet wird.

Die derzeitige Erwartung ist, dass die Seite alarms.clear ( ) tut es jetzt. Ich hatte diese Seite geändert, um zu zeigen, was ich vorgeschlagen habe, einschließlich der Vorschläge der für die WebExtensions-Dokumentation verantwortlichen Person. Der Abschnitt alarms.clear() Syntax sieht derzeit so aus:

Anfangs (vor 3 Wochen, 2016-08-25) hatte ich die API-Seiten von alarms.clear() bis browserAction.enable() mit der primären Änderung, dass der Inhalt von browser.* in chrome.* verschoben wird, wenn ich Zugriff auf Änderungen habe MDN wurde aufgrund ihrer automatischen SPAM-Filterung deaktiviert.Dies führte zu der Erörterung des Formats, das die Änderungen benötigen.Ich hielt inne und machte Änderungen mit der Hoffnung, dass die anfänglichenÄnderungen in einem einzigen Durchgang vorgenommen werden konnten, sobald dasZwischenformat für die Syntaxbox erreicht war wurde gewählt, da das Gespräch auf beiden Seiten länger gedauert hat als erwartet.

Es sieht so aus, als würde sich die Diskussion über das genaue Format, das verwendet wird, auf die dev-mdc-Mailingliste erweitern aufgrund des "richtigen" Formats für Syntax-Boxen, die nicht in der Mozilla-Dokumentation zum Schreiben einer API-Methodenseite .

Ich glaube jedoch, dass ich mit der Änderung der Anzeige von chrome.* anstelle von browser.* fortfahren kann. Dies wird wahrscheinlich dazu führen, dass die Seiten erneut bearbeitet werden müssen, um das Format zu erhalten, das schließlich als offizielle Formatierung gewählt wird. Die Änderung von browser.* auf chrome.* vor dem Finalisieren des Syntaxblock-Formats führt wahrscheinlich zu mehr Gesamtarbeit, reduziert jedoch die Verwirrung, während die endgültige Version der Formatänderung diskutiert wird. Während ich diese Änderungen Seite für Seite vornehmen muss (es gibt eine API für Massenänderungen, aber ich habe keinen Zugriff), habe ich bereits ein Skript implementiert, das die meisten erforderlichen Änderungen vornimmt. Diese ersten sollten also nicht zu lange dauern.

Aktualisierung:
Ich habe alle WebExtensions JavaScript-API-Seiten so geändert, dass chrome.* anstelle von browser.* angezeigt wird. Möglicherweise müssen Sie auf jeder Seite Strg - F5 drücken, um die Änderungen anzuzeigen.

Weitere Änderungen, die Dokumentation zu browser.* deutlicher bereitstellen:
Nachdem die vollständigen Änderungen an der Syntaxblockformatierung vorgenommen wurden, besteht der Wunsch, dass zu einem späteren Zeitpunkt weitere Änderungen auf der Basis der Unterschiede zwischen der Verwendung von chrome.* und browser.* auf API-Seite vorgenommen werden. . Dies ist mit ziemlicher Sicherheit ein längerfristiges Projekt.

    
Makyen 17.09.2016, 15:51
quelle