javascript - 插件附加脚本与 jpm run 很好,但与实际的 xpi 不一样

标签 javascript firefox-addon-sdk xpi jpm

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

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

[Exception... "Component returned failure code: 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] (unknown)

被抛出两次。

嗯,到目前为止,一切都很好(或很糟糕)。我的插件添加的切换按钮仍然显示。单击该按钮将打开一个面板,其中包含一个 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中)不会出现在控制台中。

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

Use of nsIFile in content process is deprecated. NetUtil.jsm:335:12

< unavailable > 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
});

这样,选项页面就可以正常工作了。 我遇到了一个新问题,但我会为此提出一个新问题,这样它就可以成为一个独立的问题。

关于javascript - 插件附加脚本与 jpm run 很好,但与实际的 xpi 不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36345848/

相关文章:

javascript - 使用 angularJs 初始化作用域变量

javascript - Jasmine 测试中未定义 Angular Controller

javascript - 无法将热键功能添加到 Firefox 插件

firefox-addon - 如何使用 7Zip 创建 xpi 文件?

http - 更新 XPI 以与 FF 4.0 兼容?

JavaScript 函数作为 For 循环中的变量

javascript - 隐藏和显示 div 只能运行一次

javascript - 在 Firefox 插件中显示目录浏览对话框

javascript - 如何过滤掉 Add-on SDK 扩展中的 iframe?

firefox - 是否可以将 Firefox 插件从 XPI 解码为 XUL?