我对Mozilla扩展程序开发非常陌生,即使我才刚刚了解扩展程序,附加开发程序都与众不同而且我对在MDN(Mozilla开发人员网络)上看到的内容非常满意。我希望在安装了我的附加组件后立即执行脚本'content_script.js',因此用户无需重新启动浏览器。
[我只是拖放xpi文件并安装它,然后单击网页上的一个按钮,该按钮会将消息发送到我的附件,但是我的附件仅在重新加载网页后才收听此消息。
//main.js
var chrome = require("chrome");
chrome.runtime.onInstalled.addListener(function(){
executeScript (contentscript.js) in tabs});
//also I tried
browser.runtime.onInstalled.addListener
[我在尝试使用Mozilla扩展而不是附加组件时尝试了此操作,因为它给我带来了浏览器未定义和chrome.runtime
未定义的错误。
然后,我在onInstalled()
中找到了AddonManager.addAddonListener()
。
但是,我仍然很困惑如何在附加组件中使用它。
无论我尝试哪种方式都会给我带来错误。
AddonManager.addAddonListener()
下面的代码删除了该错误,但也不起作用:
//main.js
const { AddonManager } = require("resource://gre/modules/AddonManager.jsm");
Cu.import("resource://gre/modules/AddonManager.jsm");
AddonManager.addAddonListener.onInstalled.addListener(function(){
console.log('installed');
tabs.executeScript(tabId, "../data/content_script.js", function(result) { console.log('result ='+result); });
});
我的package.json看起来像这样
const { AddonManager } = require("resource://gre/modules/AddonManager.jsm");
Cu.import("resource://gre/modules/AddonManager.jsm");
var listener = {
onInstalled: function(addon) {
console.log('installed');
console.log(addon);
tabs.executeScript(tabId, "../data/content_script.js", function(result) { console.log('result ='+result); });
}
};
AddonManager.addAddonListener(listener);
[ {
"title": "test",
"name": "test",
"version": "1.0.0",
"description": "test addon corp",
"main": "lib/main.js",
"author": "test",
"engines": {
"firefox": ">=38.0a1",
"fennec": ">=38.0a1"
},
"license": "MIT",
"keywords": [
"jetpack"
]
}
包含main.js,但仍未执行,因为当我仅重新加载页面时,我的加载项才起作用。
[我认为我做错了,我在Chrome扩展程序中做到了,这很容易,但是我对Mozilla附加组件一无所知。我什至无法达到“已安装”状态。执行content_script距离很远。
看来您遇到了一些问题:
main
的方法,例如tabs.executeScript()
。对于活动选项卡,它将为tabs.executeScript()
。tab.attach()
tab.attach()
事件发生在发生在附件的任何代码的发生[。因此,对于正在侦听的加载项,您将不会收到此事件。tabs.activeTab.attach()
主要用于您的加载项,以便能够监视涉及tabs.activeTab.attach()
AddonManager
事件。如果用户直接将其删除,则只会收到AddonManager
事件。onInstalled
不会显示在浏览器控制台中。 C0]。输出在执行onInstalled
的控制台窗口中可用。虽然输出是设计使然进入控制台窗口,但我感觉输出没有进入浏览器控制台(除了控制台窗口)还是错误或功能不足。AddonManager
页面中所导致的某些行为与将其加载到普通网页中不同。此行为可能包括使AddonManager
输出仅显示为好像是使用onDisabled
输出的(即,它不会显示在浏览器控制台中,而是显示在执行Firefox / onDisabled
的控制台中)。如果您尝试这样做,则需要对自己的能力进行试验。onUninstalling
输出中寻找正确的位置onUninstalling
。因此,我在下面的附加组件中自动打开了浏览器控制台。console.log()
键jpm run
中指定的JavaScript文件在安装了附加组件后运行。它也可以在Firefox启动时运行。jpm run
函数,该函数在jpm run
JavaScript文件中的代码被评估并执行后会自动调用。此功能可用于查找执行加载项的原因。可能的原因是about:*
,console.log()
,console.log()
,dump()
和dump()
。下面的附加组件演示何时执行此代码并将jpm run
传递给它。console.log()
事件。我制作了此加载项的两个版本,它们的名称和ID仅在各自的package.json文件中分配给它们的名称和ID不同。这两个附加组件是Browser Console和package.json。
第一个附加组件"main"
,是通过在其目录中运行"main"
来加载的。通过拖放exports.main
为它创建的<.xpi>来安装第二个附件exports.main
。使用Firefox UI,我立即导航到OSX上的"main"
(Ctrl
-Shift-A,Cmd-Shift-A ),然后首先禁用install
;然后“删除” enable
;然后刷新startup
页面以使其无法“撤消”删除。然后,我退出Firefox主浏览器窗口。附加组件向控制台提供了大量输出,因此您可以查看事情发生的顺序以及哪个附加组件能够接收哪些upgrade
事件。控制台输出为[括号中是我对用户界面所做的操作,以及一些注释]:downgrade
我建议您在下面的附加组件上进行实验,以了解AddonManager事件可能发生的情况以及代码在附加组件内执行的时间。
附加文件:index.js
:
reason
data / contentScriptA:
AddonManager
data / contentScriptB:
installinfo@ex1
package.json(对于installinfo @ ex1):
installinfo@ex2
package.json(对于installinfo @ ex2 ::
installinfo@ex1