繁体   English   中英

Addon可以在jpm run上附加脚本,但不能在实际的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM