Firefox addon 介紹

附加元件:

Firefox 附加元件通常分為 Extensions,然後是其他型別的 Firefox 附加元件。

擴充套件

擴充套件允許通過新增或修改 Firefox 的功能來定製 Firefox。可以通過擴充套件完成的一些型別的事情包括:

  • 更改特定網站的顯示方式,內容或與之互動的方式。
  • 自定義 Firefox 使用者介面
  • 為 Firefox 新增其他功能
  • 更改現有 Firefox 功能的功能

Firefox 擴充套件主要是用 JavaScript 編寫的,並新增了一些 JavaScript API。

棄用和刪除除 WebExtensions 之外的所有型別的擴充套件

Firefox 附加元件,特別是擴充套件,目前處於不穩定狀態。Mozilla 已經宣佈並確認他們已經棄用了除 WebExtensions 之外的所有型別的 Firefox 擴充套件,並且所有基於非 WebExtensions 的擴充套件都將在 Firefox 57 中被禁用,計劃於 2017 年 11 月 14 日推出

擴充套件型別

Firefox 有四種型別的擴充套件(所有擴充套件通常稱為附加元件):

  • WebExtensions :向前發展,WebExtensions 是唯一支援的 Firefox 擴充套件型別。這些載入項由 manifest.json 檔案描述。此 API 類似於用於 Google Chrome 擴充套件程式的 API。除了 Javascript 之外,這些載入項還使用 HTML 和 CSS。雖然 Mozilla 已宣告此 API 是 Firefox 擴充套件的未來,但此 API 仍處於開發階段。目前,你可能最好使用 Firefox Developer EditionFirefox Nightly 開發和測試 WebExtension 外掛。你還應該仔細記錄你希望使用的功能所需的 Firefox 版本。此資訊包含在 MDN 文件頁面的瀏覽器相容性部分中。

    WebExtensions 使用與其他三種型別的擴充套件明顯不同的 API。故意,沒有能力使用任何其他附加型別提供的介面。

  • 附加 SDK :[ 已棄用; 計劃刪除 ]這些附加元件由 package.json 檔案描述,該檔案最初是通過執行 jpm init 生成的。這些擴充套件通常使用 require() 載入高階低階 API 以與 Firefox 連線。除了 Javascript 之外,這些載入項還使用 HTML 和 CSS。目前,這些附加元件在載入到 jpm run 進行測試時被包裝到自舉擴充套件中,或者由 jpm xpi 合併到 .xpi 檔案中進行分發(即上傳到 AMO / Mozilla)。換句話說,它們是帶有 SDK 包裝器的自舉擴充套件。

    只要擴充套件不使用 require("chrome"),或者依賴於 XULXPCOMXBL ,Mozilla 似乎致力於繼續支援基於附加 SDK 的擴充套件。

    可以在引導擴充套件中完成的大多數事情可以在基於 Add-on SDK 的擴充套件中完成。但是,許多此類事情繞過了 SDK,這會損害使用 Add-on SDK 的大部分好處。

  • Bootstrapped :[ 已棄用; 計劃刪除 ]這些擴充套件通常也稱為無重啟,因為它們是第一種型別的 Mozilla 擴充套件,它不需要重新啟動應用程式來載入/解除安裝附加元件。然而,restartless 是它們如何運作的描述符。使用 restartless 作為此類附加元件的名稱會讓人感到困惑,因為 Add-on SDK 和 WebExtension 附加元件也不需要在載入或解除安裝載入項時重新啟動應用程式。出於這個原因,有一種趨勢是不再使用無重啟作為這種型別的附加元件的名稱。

    除了 Javascript 之外,這些載入項還使用 HTML 和 CSS。許多人還使用 XUL 與 Firefox 互動。

    這些附加元件有一個名為 bootstrap.js 的 JavaScript 檔案,它必須包含為附加元件 startup()shutdown()install()uninstall() 呼叫的入口點(函式)

    這些載入項包含一個描述載入項的 install.rdf 檔案。它們通常(但不總是)也包含 chrome.manifest 檔案,該檔案描述擴充套件中的檔案和目錄如何與 Mozilla 應用程式(例如 Firefox)相關。

    大多數(但不是全部)可以在 overlay / XUL / Legacy 擴充套件中完成的事情可以在 bootstrapped 附加元件中完成。可以在附加 SDK 中完成的任何操作都可以在引導擴充套件中完成(附加 SDK 擴充套件是帶有一些基於 JavaScript 的 API 層的引導附加元件)。

    Mozilla 表示他們計劃棄用 “依賴於 XULXPCOMXBL的附加元件 ”。雖然並非所有引導附加元件都依賴於這些技術,但引導附加元件的執行傾向於比 Add-on SDK 和 WebExtension 附加元件更低的級別。因此,他們更有可能使用這些技術。雖然有些人認為所有自舉附加元件都計劃被棄用,但目前尚不清楚是否屬實。畢竟,Add-on SDK 擴充套件不會被棄用(除非他們使用 require("chrome"),或者依賴於 XUL,XPCOM 或 XBL),並且所有附加 SDK 擴充套件都是自舉擴充套件,只需使用 SDK 包裝器。

  • Overlay / XUL / Legacy :[ 已棄用; 定於去除這些附加元件包含的 install.rdf 描述附加和檔案 chrome.manifest 用於 檔案來描述該載入項的檔案如何與(例如疊加)應用程式的檔案。應用程式的載入項功能如何完全依賴於 chrome.manifest 檔案中描述的關係。唯一的例外是一些事情,例如擴充套件的圖示和描述擴充套件的選項的檔案,這些選項在 install.rdf 檔案中指出。這些擴充套件以非常低的級別與應用程式(例如 Firefox)互動。這往往會使他們在對應用程式進行更改時更容易中斷。

    除了 Javascript 之外,這些附加元件還使用 XUL,HTML 和 CSS。有些人還使用 XPCOMXBL

    計劃棄用所有 Overlay / XUL / Legacy 擴充套件。

其他型別的 Firefox 附加元件

當大多數人考慮 Firefox 附加元件時,他們正在考慮上述擴充套件。但是,還有一些其他型別的 Firefox 附加元件:

這個示例主要是通過一些修改來複制的,來自我的 Makyen’s,回答 stackoverflow 問題
此內容的某些部分是複製的,或至少基於 Mozilla Developer Network(MDN) 上的 Add-on 頁面
這最初是由 Makyenfirefox-addon 標籤備註部分發布的。然後由 OndřejDoněk修改,後者刪除了額外的 for。在由 nus執行的單個編輯中,它從備註移動到標題為簡介的固定示例。不幸的是,這樣做會導致系統丟失歸因資訊。