API 實現之間的差異

瀏覽器擴充套件 API 是一項新興標準。因此,儘管它得到了大多數主流瀏覽器(包括 Firefox、Chrome、Edge 和 Opera)的支援,但各個實現之間存在差異。這意味著為了在多個瀏覽器上實現您的擴充套件,可能需要進行一些更改。

在支援擴充套件 API 的各種瀏覽器中,Firefox 對新興標準的相容性最好,因此,在開發瀏覽器擴充套件時,它是您開始的最佳選擇。

瀏覽器 API 實現之間的差異包括四個方面:名稱空間、非同步事件處理、API 覆蓋範圍和 manifest 鍵。

名稱空間

您使用名稱空間引用所有擴充套件 API 函式。例如,browser.alarms.create({delayInMinutes}); 在 Firefox 中建立一個將在 delayInMinutes 指定的時間後觸發的警報。

有兩個 API 名稱空間在使用中:

  • chrome 用於 Chrome、Edge 和 Opera。
  • browser 用於 Firefox 和 Safari。

非同步事件處理

JavaScript 提供了幾種處理非同步事件的方法。提議的擴充套件 API 標準是使用 Promise。當處理鏈式非同步事件呼叫時,Promise 方法具有顯著優勢。

Firefox 和 Safari 在擴充套件 API 中實現了 Promise。所有其他瀏覽器使用回撥。在 Manifest V3 中,Chrome、Edge 和 Opera 為大多數適用方法提供了Promise。(參見 Chrome bug 328932

如果您不熟悉 JavaScript 如何處理非同步事件或 Promise,請參閱瞭解非同步 JavaScript:回撥、Promise 和 Async/Await或 MDN 的使用 Promise頁面。

API 覆蓋範圍

瀏覽器之間擴充套件 API 函式實現的差異大致分為三類:

  • 對整個函式缺乏支援。
  • 函式內對功能的支​​持存在差異。例如,在撰寫本文時,Firefox 不支援notification函式方法 onButtonClicked,而 Firefox 是唯一支援 onShown 的瀏覽器。
  • 支援特定瀏覽器功能的專有函式。例如,在撰寫本文時,容器是 Firefox 的特定功能,由 contextualIdentities 函式支援。

Manifest 鍵

支援的 manifest.json 在瀏覽器之間的差異大致分為兩類:

  • 擴充套件資訊屬性。例如,在撰寫本文時,Firefox 和 Opera 在(除 author 鍵之外)還包括 developer 鍵,用於記錄有關擴充套件開發者的詳細資訊。
  • 擴充套件功能。例如,在撰寫本文時,只有 Firefox 支援 protocol_handlers 鍵(該鍵用於註冊基於 Web 的協議處理程式,即知道如何處理特定型別連結的應用程式)。

更多資訊

您可以在以下位置找到有關支援的瀏覽器擴充套件 API 功能差異的更詳細資訊: