我对addon-sdk还是很陌生,遇到了一个我无法解释的问题。到目前为止,我一直在使用jpm run来测试所有内容-一切都很好。现在,我即将完成要完成的工作,因此我想在“正常”浏览器中对其进行测试-主要是在几天内使用它来查看一切是否按预期工作。
但是,安装过程已经引发了两条错误消息:
[异常...“组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[nsIURI.hostPort]” nsresult:“ 0x80004005(NS_ERROR_FAILURE)”位置:“ JS框架::资源://gre/modules/PopupNotifications.jsm :: PopupNotifications_refreshPanel / <::行667“数据:否](未知)
被抛出两次。
好吧,到目前为止,很好(或不好)。我的插件添加的切换按钮仍然显示。单击按钮将打开一个包含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());
工作正常,但是在
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中
好吧,我设法解决了这个问题。
现在,无论何时打开选项页面,我都使用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
});
这样,选项页面可以很好地工作。我遇到了一个新问题,但是我会问一个新问题,这样它可以是一个独立的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句