我无法将复杂的Chrome扩展程序转换为Firefox附加组件。在Chrome扩展程序中,作者使用了一些Chrome API,例如
chrome.extension.sendMessage
chrome.browserAction.setIcon
webkitNotifications.createNotification
chrome.tabs.sendMessage
chrome.extension.onMessage.addListener
chrome.browserAction.onClicked.addListener
chrome.privacy.services.autofillEnabled.get
chrome.runtime.onInstalled.addListener
chrome.tabs.query
localStorage
等等。
我不知道如何在Firefox附加代码中实现这些方法。可以使用回调函数调用其中一些API。例如:
chrome.extension.sendMessage ( {
type: "get.identitieswithurl",
originUrl: lgmIdentitySave.originUrl,
actionUrl: lgmIdentitySave.actionUrl
},
function (resultIdentities) {
if(resultIdentities != null && resultIdentities.length > 0) {
lgmIdentitiesPage = resultIdentities;
fillFormsWithCredential(resultIdentities[0]);
if(resultIdentities.length > 1 && lgmSuggestionSelectIdDismissed == false) {
showSelectIdentitySuggestionBar();
}
}
}
);
从this question开始,我知道Firefox代码可以像
一样编写// main add-on script
pageMod.PageMod({
include: "*.org",
contentScriptFile: self.data.url("my-script.js"),
// Send the content script a message inside onAttach
onAttach: function (worker) {
worker.port.emit("replacePage", "Page matches ruleset");
}
});
但我仍然不知道如何添加回调函数。
答案 0 :(得分:8)
我们来看看你的清单。在整个答案中,我将参考相关的documentation。如果您对开始使用Firefox附加组件开发完全无能为力,请阅读Getting started教程。
在开始之前,还请阅读modules和SDK Idioms(最后一个非常重要,因为它解释了Firefox附加SDK世界中的重要概念)。
chrome.extension.sendMessage
/ chrome.tabs.sendMessage
/
chrome.extension.onMessage.addListener
请参阅Content scripts了解如何使用sdk/page-mod
模块并传递消息。
chrome.browserAction.setIcon
和chrome.extension.onMessage.addListener
我编写了一个SDK模块,它是Chrome的chrome.browserAction
API for Firefox的完整实现。安装说明和文档位于https://github.com/Rob--W/browser-action-jplib。
webkitNotifications.createNotification
请参阅sdk/notifications
模块。
chrome.privacy.services.autofillEnabled.get
请参阅sdk/preferences/service
模块。可以在about:config entries文章中找到偏好标识符列表。对于您的具体示例:
var prefName = 'browser.formfill.enable';
var prefService = require("sdk/preferences/service");
var isAutoFillEnabled = prefService.get(prefName); // true or false
chrome.runtime.onInstalled.addListener
您的扩展程序是否已安装,可以通过阅读loadReason
property of the self
module来确定,例如
if (require('sdk/self').loadReason == 'install') {
// Do something on the very first install
}
chrome.tabs.query
sdk/tabs
模块是一个迭代器。您可以遍历该对象并自行过滤掉结果。
localStorage
请参阅sdk/simple-storage