通過 WebExtensions 移植

在討論從/向移植 Firefox 擴充套件之前,應該知道什麼是 WebExtensions

WebExtensions - 是一個代表用於建立 Firefox 擴充套件的 API 的平臺。

它使用與 Chromium 相同的擴充套件架構,因此,此 API 在許多方面與 Google ChromeOpera (基於 Chromium 的 Opera)中的 API 相容。在許多情況下,為這些瀏覽器開發的擴充套件程式可以在 Firefox 中進行一些更改,甚至根本不需要它們。

MDN 建議使用 WebExtension 進行新擴充套件:

將來,WebExtensions 將成為開發 Firefox 附加元件的推薦方式,其他系統將被棄用。

鑑於上述情況,如果要將擴充套件埠擴充套件到 Firefox ,則必須知道擴充套件的編寫方式。

Firefox 的擴充套件可以基於 WebExtensionAdd-on SDKXUL

基於 WebExtension 的相容擴充套件

當使用 WebExtension 時,必須檢視不相容性列表,因為某些功能完全或部分支援,換句話說,應該檢查一個人的 manifest.json

它還允許使用相同的名稱空間

目前,所有 API 都可以通過 chrome。*名稱空間訪問。當我們開始新增自己的 API 時,我們希望將它們新增到瀏覽器。* namespace。開發人員將能夠使用功能檢測來確定瀏覽器中是否有 API。*。

一個簡單的擴充套件,可以在 Firefox 和谷歌瀏覽器中使用

manifest.json

{
  "manifest_version": 2,
  
  "name": "StackMirror",
  
  "version": "1.0",
  
  "description": "Mirror reflection of StackOverflow sites",
  
  "icons": {
    "48": "icon/myIcon-48.png"
  },
  
  "page_action": {
    "default_icon": "icon/myIcon-48.png"
  },
  
  "background": {
    "scripts"   : ["js/background/script.js"],
    "persistent": false
  },
  
  "permissions": ["tabs", "*://*.stackoverflow.com/*"]
}

background 指令碼:

function startScript(tabId, changeInfo, tab) {

    if (tab.url.indexOf("stackoverflow.com") > -1) {

        chrome.tabs.executeScript(tabId, 
            
            {code: 'document.body.style.transform = "scaleX(-1)";'}, function () {

            if (!chrome.runtime.lastError) {

                chrome.pageAction.show(tabId);
            }
        });
    }
}

chrome.tabs.onUpdated.addListener(startScript);

將專案打包為標準 zip 檔案,但使用 .xpi 副檔名。

StackOverflow 文件

然後,你必須在 Firefox 中載入擴充套件程式

開啟 about:addons 頁面,可通過選單>附加元件訪問

單擊 Tools for all add-ons 按鈕。

StackOverflow 文件

載入擴充套件程式時,頁面 about:addons 將如下所示:

StackOverflow 文件

有關在 Google Chrome 中載入擴充套件程式的說明,請參閱其他主題 - Chrome 擴充套件程式使用入門

兩種瀏覽器( Firefox / Google Chrome ) 的擴充套件操作結果相同 :

StackOverflow 文件

如果當前載入項基於 Add-on SDK 或 XUL

當移植的擴充套件基於 Add-on SDK 時,必須通過比較表檢視 Add-on SDK => WebExtensions,因為這些技術具有相似的特徵,但實現方式不同。表的每一部分描述了 Add-on SDK 對於 WebExtension 的等價物。

與附加 SDK 比較

類似的方法和 XUL 擴充套件。

與 XUL / XPCOM 擴充套件的比較