![](/img/trans.png)
[英]How to get Windows username in a legacy (not WebExtensions) Firefox add-on?
[英]How do I migrate a legacy XPCOM extension to WebExtensions?
嵌入式WebExtensions討論了如何“......將WebExtension嵌入到經典的自舉擴展程序或附加SDK插件中”。
但我既沒有“bootstrapped”也沒有“Add-on SDK”擴展,只有十年之久的舊XPCOM /覆蓋擴展。 我沒有bootstrap.js來啟動,也沒有使用Add-on SDK。
我嘗試添加
<em:bootstrap>true</em:bootstrap>
但所有完成的工作完全破壞了擴展, 它只加載(空)新的bootstrap.js文件。
實際上,我想遷移 :我的經典擴展所需的數據需要導出到webext版本,以獲得良好的用戶體驗。
在我們的跟蹤錯誤中 ,用戶發布了一個有用的鏈接:
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`
);
});
這肯定相當於bootstrap / SDK代碼為您做的事情。
您只能使用WebExtension API從頭開始重寫它。
請注意,WebExtensions模型要求您僅使用顯式導出以供擴展使用的API,因此准備在重寫期間刪除某些功能,或者甚至發現無法完全重新實現擴展(除非您說服Mozilla實現新API您需要或在WebExtension實驗中自己實現它 - 仍然限於Nightly / Dev.edition)。
[edit]“嵌入式WebExtension”確實需要你的“外部”擴展來引導或基於附加SDK(所以沒有“經典”擴展),但它只是用於逐步遷移,不會起作用在Firefox 57中。
沒有方便的方法直接這樣做。
最有效的方法是:
雖然這不允許逐步遷移到WebExtension,這是使用嵌入式WebExtensions的假設好處之一,但它允許您將數據從覆蓋擴展遷移到基於WebExtensions的版本。
你可以先將它轉換為bootstrapped / Add-on SDK然后嵌入WebExtensions然后完整的WebExtension,但這將是更多的工作,沒有任何顯着的好處。
我向類似情況的人建議的一個選項是在當前的舊版插件中提供導出功能,在WebExtension版本中提供導入 。 雖然它不是自動遷移(必須是用戶操作),但它克服了WebExtension本地文件訪問的一些限制。
使用“ 導出” ,將提示用戶將其完整數據保存到硬盤。
然后,下一次升級將是WebExtension,提示用戶導入已保存的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.