3

Embedded WebExtensions會談如何「......將WebExtension嵌入到經典的引導擴展或附加SDK附加組件中」。如何將傳統XPCOM擴展遷移到WebExtensions?

但我既沒有「bootstrapped」也沒有「Add-on SDK」擴展,只有十年前的普通舊XPCOM/overlay擴展。我沒有bootstrap.js有一個啓動,我也不使用附加SDK的任何事情。

我嘗試添加

<em:bootstrap>true</em:bootstrap> 

但所有的實現是完全摧毀擴展,加載該(空)新bootstrap.js文件。

事實上,我想遷移:我對於傳統分機有需要將數據導出到webext版本,良好的用戶體驗。

回答

2

our tracking bug用戶發佈了一個有用的鏈接:

https://github.com/mdn/webextensions-examples/tree/master/embedded-webextension-overlay

這可以歸結爲

const { 
    LegacyExtensionsUtils, 
} = Components.utils.import("resource://gre/modules/LegacyExtensionsUtils.jsm"); 

const myOverlayEmbeddedWebExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({ 
    id: addonId, resourceURI: baseURI, 
}); 

myOverlayEmbeddedWebExtension.startup().then(({browser}) => { 
    dump(`${addonId} - embedded webext started\n`); 
    browser.runtime.onMessage.addListener(msg => { 
    dump(`${addonId} - received message from embedded webext ${msg}\n`); 
    }); 
}).catch(err => { 
    Components.utils.reportError(
    `${addonId} - embedded webext startup failed: ${err.message} ${err.stack}\n` 
); 
}); 

這肯定是什麼樣的引導/ SDK代碼爲你做的等價。

0

您只能使用WebExtension API從頭開始重寫它。

請注意,WebExtensions模型要求您只使用顯式導出以供擴展使用的API,因此準備在重寫過程中放棄某些功能,甚至完全不可能重新實現擴展(除非讓Mozilla信服實施您需要的新API或者在WebExtension實驗中自行實施它 - 仍然僅限於Nightly/Dev.edition)。

Porting a legacy Firefox extension

[編輯]的「嵌入WebExtension」確實需要你的「外」延伸自舉或附加在基於SDK(所以沒有「經典」擴展名),但它只是意用於逐步遷移,並且不會在Firefox 57中運行。

+0

因此,在標題中「遷移」一詞,我希望能夠將數據遷移到webext版本。 – arantius

0

沒有方便的方法直接執行此操作。

最有效的方式做到這一點是:

  1. 重寫您的分機作爲一個WebExtension。考慮到WebExtensions的限制,儘可能多地發揮功能。
  2. 然後,添加一個引導程序或附加SDK(更簡單)的包裝器,它只傳輸來自原始基於覆蓋的擴展的數據。因此,擴展的引導程序/附加SDK部分將最小化,只有任務是啓動WebExtension(每次擴展加載時)並傳輸數據(一次)。

雖然這將不允許逐步遷移到WebExtension,這是使用嵌入式WebExtensions的假設好處之一,它將允許您將數據從覆蓋擴展遷移到基於WebExtensions的版本。

您可以先將它轉換爲自舉/附加SDK,然後嵌入WebExtensions,然後是完整的WebExtension,但這樣做工作量會大大增加,沒有任何顯着的優勢。

0

一個選擇,我建議在類似情況下的人,是提供在當前傳統插件的出口功能和導入在WebExtension版本。雖然它不是自動遷移(必須是用戶操作),但它克服了WebExtension本地文件訪問的一些限制。

使用導出,系統會提示用戶將其完整數據保存到硬盤。

然後下一次升級將是WebExtension,提示用戶導入保存的數據。

相關問題