我对addon-sdk还是比较新的,并且遇到了一个无法解释的问题。 到目前为止,我一直在使用jpm run来测试所有内容 - 这一切都很有效。现在,我已经接近完成了我想要完成的任务,所以我想在“普通”浏览器中进行测试运行 - 主要是在几天内使用它来查看一切是否按预期工作。
但是,安装过程已经抛出两条错误消息:
[Exception ...“组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[nsIURI.hostPort]”nsresult:“0x80004005(NS_ERROR_FAILURE)”location:“JS frame :: resource://gre/modules/PopupNotifications.jsm :: PopupNotifications_refreshPanel /< :: line 667“data:no] (未知)
被抛出两次。
那么,到目前为止,那么好(或坏)。我的插件添加的切换按钮仍然显示出来。单击该按钮会打开一个包含html页面的面板 - 仍在工作。 panel.html包含一个按钮,这是我遇到麻烦的原因。
如果单击,该按钮会向我的主要插件发送消息:
optionsButton.addEventListener("click", function(){
self.port.emit("options-clicked");
});
index.js监听:
panel.port.on("options-clicked", function () {
tabs.open("./privacyProtector/options.html");
panel.hide();
var optionsTab = tabs[tabs.length - 1];
var worker = optionsTab.attach({
contentScriptFile: "./privacyProtector/js/internalOptions.js",
});
/* send current settings to options */
worker.port.emit("initialize", createSettingsJSON());
});
现在options.html选项卡被打开(并且面板消失),但看起来好像没有附加contentScriptFile。我试图找出代码停止工作的确切位置,但却未能实现。
之后的'console.log()'worker.port.emit("initialize", createSettingsJSON());
工作正常,但是
的'console.log()'self.port.on("initialize", function (message) {
initialize(message);
});
(在internalOptions.js中)不会出现在控制台中。
无论如何,浏览器控制台报告:
不推荐在内容流程中使用nsIFile。 NetUtil.jsm:335:12
<不可用> timers.js:43
这些错误我不知道该怎么做,因为所有这些都与“jpm run”完美配合。因此,我会感激任何帮助,因为我完全不知道这里发生了什么。
如果需要,我也可以发布更多代码,但我认为这篇文章已经足够长了。
谢谢!
编辑:我将代码上传到github。也许这会让我更轻松。
https://github.com/Azlond/TrackingProtector
上述代码位于data / privacyProtector / js / panel.js,index.js第66-91行,以及data / privacyProtector / js / internalOptions.js
答案 0 :(得分:2)
好吧,我设法解决了这个问题。
不是手动将脚本附加到打开的选项卡,而是在打开选项页面时使用pagemod附加脚本。
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "resource://protector/data/privacyProtector/options.html",
contentScriptFile: "./privacyProtector/js/internalOptions.js",
contentScriptWhen: "end",
onAttach: sendSettings
});
这样,选项页面工作得很好。 我遇到了一个新问题,但我会问一个新问题,所以这可能是一个独立的问题。