我对 addon-sdk 还很陌生,并且遇到了一个对我来说无法解释的问题。到目前为止,我一直在使用 jpm run 来测试一切——一切都很好。现在,我即将完成我想要完成的工作,所以我想在“普通”浏览器中对其进行测试 - 主要是在几天内使用它,看看一切是否按预期工作。
但是,安装过程已经抛出了两条错误消息:
[异常...“组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [nsIURI.hostPort]”nsresult:“0x80004005 (NS_ERROR_FAILURE)”位置:“JS 框架 :: 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 中