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 功能差異的更詳細資訊: