![](/img/trans.png)
[英]Object.defineProperty() works during testing (jpm run), but doesn't do anything when using the actual xpi
[英]Addon attaches script just fine with jpm run, but not with the actual xpi
我对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());
可以正常工作,但是在下面有一个'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中
好吧,我设法解决了这个问题。
现在,无论何时打开选项页面,我都使用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
});
这样,选项页面可以很好地工作。 我遇到了一个新问题,但是我会问一个新问题,这样它可以是一个独立的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.