Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 插件在jpm运行时可以很好地附加脚本,但在实际的xpi中不能_Javascript_Firefox Addon Sdk_Xpi_Jpm - Fatal编程技术网

Javascript 插件在jpm运行时可以很好地附加脚本,但在实际的xpi中不能

Javascript 插件在jpm运行时可以很好地附加脚本,但在实际的xpi中不能,javascript,firefox-addon-sdk,xpi,jpm,Javascript,Firefox Addon Sdk,Xpi,Jpm,我对插件sdk还相当陌生,遇到了一个对我来说无法解释的问题。 到目前为止,我一直在使用jpm run来测试一切,而且一切都很好。现在,我即将完成我想要完成的任务,所以我想在“普通”浏览器中对它进行一次测试——主要是在几天内使用它,看看是否一切都按预期进行 但是,安装过程已经抛出两条错误消息: [异常…”组件返回故障代码:0x80004005(NS_错误)[nsuri.hostPort]“nsresult:“0x80004005(NS_错误)”位置:“JS帧::resource://gre/mod

我对插件sdk还相当陌生,遇到了一个对我来说无法解释的问题。 到目前为止,我一直在使用jpm run来测试一切,而且一切都很好。现在,我即将完成我想要完成的任务,所以我想在“普通”浏览器中对它进行一次测试——主要是在几天内使用它,看看是否一切都按预期进行

但是,安装过程已经抛出两条错误消息:

[异常…”组件返回故障代码:0x80004005(NS_错误)[nsuri.hostPort]“nsresult:“0x80004005(NS_错误)”位置:“JS帧::resource://gre/modules/PopupNotifications.jsm ::PopupNotifications\u 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()”

工作正常,但在

(位于internalOptions.js中)不会出现在控制台中

无论如何,浏览器控制台会报告:

不推荐在内容处理中使用nsIFile。NetUtil.jsm:335:12

timers.js:43

这些都是我不知道该怎么办的错误,因为所有这些在“jpm运行”中都可以很好地工作。因此,我非常感谢任何帮助,因为我完全不知道这里发生了什么

如果需要,我也可以发布更多的代码,但我认为这篇文章已经足够长了

谢谢

编辑:我把代码上传到github。也许这会让帮助我更容易


前面提到的代码在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
});
通过这种方式,“选项”页面工作得非常好。
我遇到了一个新问题,但我将为此提出一个新问题,因此这可能是一个独立的问题。

嗯,我成功地解决了这个问题

现在,我不再手动将脚本附加到打开的选项卡,而是在每次打开选项页面时使用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
});
通过这种方式,“选项”页面工作得非常好。 我遇到了一个新问题,但我将为此提出一个新问题,因此这可能是一个独立的问题

var pageMod = require("sdk/page-mod");
pageMod.PageMod({
    include: "resource://protector/data/privacyProtector/options.html",
    contentScriptFile: "./privacyProtector/js/internalOptions.js",
    contentScriptWhen: "end",
    onAttach: sendSettings
});