【问题标题】:Firefox add-on works with "jpm run", but not whith .xpi file generated with "jpm xpi"Firefox 插件适用于“jpm run”,但不适用于使用“jpm xpi”生成的 .xpi 文件
【发布时间】:2015-10-18 17:48:41
【问题描述】:

我正在使用 Firefox Add-on SDK 开发 Firefox 插件。 我关注了Getting Started tutorial

火狐版本:41.0.2
我的流程是:

  1. jpm run --> 好的,插件工作正常
  2. jpm xpi --> OK : 创建 @myAddon.xpi (JPM [info] 成功创建 .xpi at ...)
  3. 使用 @myAddon.xpi --> NOK
    当我尝试在我的 Firefox 中安装插件时(插件 -> 从文件安装 -> @myAddon.xpi ),我收到一条消息“安装成功”。看起来挺好的。但是,插件不起作用。什么都没有发生。

那么,为什么用jpm run测试可以,但是安装.xpi文件后就不行???

我可以和你分享代码,但是这种情况怎么会发生呢?如果它在测试中有效,我希望它在“发布”中有效。 我没有收到任何错误或警告。

高级:

Index.js

pageMod.PageMod({
    include: "*",
    contentScriptFile: [data.url("jquery-1.11.3.min.js"), data.url("./Compute.js")],
    onAttach: function (worker) {
        var currentUrl = tabs.activeTab.url;
        param = currentUrl;
        Request({
            url: param,
            onComplete: function (response) {
                var parsed = JSON.parse(response.text);
                worker.port.emit('got-request', parsed);
            }
        }).get();
    }

数据/Compute.js

self.port.on('got-request', function (data) {
    console.log(data);
});

编辑(从 cmets 移出):
我发现了一些有趣的东西.... 根据 FireFox 中的隐私级别,插件是否可以工作。 (选项->隐私->历史“记住历史”或“永远不记得历史”)-记住历史“-> addOn OK-“永远不记得历史”-> addOn NOK 知道为什么

【问题讨论】:

  • 我发现了一些有趣的东西.... 根据 FireFox 中的隐私级别,插件是否可以工作。 (选项->隐私->历史“记住历史”或“永远不记得历史”)-记住历史“-> addOn OK-“永远不记得历史”-> addOn NOK 知道为什么吗?
  • 代码 sn-p 看起来不错。将插件上传到 github 并分享链接。
  • @user5023028 是的,默认情况下,jpm 插件在私有模式下不起作用。您必须向您的 package.json 添加一个密钥才能在私有模式下工作。
  • 谢谢。现在它适用于:“permissions”:{“private-browsing”:true},添加到 package.json
  • 这个问题是题外话,因为:这是一个调试问题,不包含诊断问题所需的信息。 cmets 清楚地表明问题是 package.json 文件中未设置权限,该文件未包含在问题中。因此,这个问题需要猜测未提供的信息。我正在使用自定义原因,因为它确实包含代码,而不是所有必要的代码。因此,人们很难看出它实际上是题外话。

标签: firefox-addon firefox-addon-sdk


【解决方案1】:

正如您所确定的,如果您希望您的 Firefox Add-on SDK 插件在 Private Browsing mode 中工作,您需要在您的 package.json 文件中添加值为 true 的密钥 private-browsing

如果您没有使用其他 permissions,您可以在 package.json 文件中添加一行,如下所示:

"permissions": {"private-browsing": true}

Firefox documentation on writing SDK add-ons for private browsing 模式明确指出,当出现以下任何一种情况时,require("sdk/private-browsing").isPrivate() 方法将返回 true(强调我的):

  • 私人窗口,或
  • 属于私人窗口的选项卡,或
  • 与托管在私人窗口中的文档相关联的工作人员
  • 如果浏览器已配置为从不记住历史记录(选项->隐私->历史记录)

如果您没有"private-browsing": true,那么,作为documentation states,将是以下情况(强调我的):

  • windows 模块不会列出任何私人浏览器窗口,不会为私人浏览器窗口生成任何事件,或让插件打开任何私人浏览器窗口
  • tabs 模块不会列出任何属于私人浏览器窗口的选项卡,并且插件不会接收此类选项卡的任何事件
  • 任何ui 组件都不会显示在私人浏览器窗口中
  • 使用context-menu 创建的任何菜单或菜单项都不会显示在属于私人浏览器窗口的上下文菜单中
  • page-mod 模块不会将内容脚本附加到属于私人浏览器窗口的文档
  • 如果活动窗口是私人浏览器窗口,则不会显示任何 panel 对象
  • selection 模块将不包括在私人浏览器窗口中所做的任何选择

最终结果是,当您使用的配置文件被配置为在您的 package.json 中没有 "private-browsing": true 权限的情况下永远不会记住历史记录时,您的附加组件似乎无法正常工作。

如果您确实将该权限放在您的 package.json 文件中,则必须使用私有浏览模块 require("sdk/private-browsing").isPrivate(object) 来检查是否在私有窗口或选项卡中。如果您在此类窗口或选项卡中,则无需存储有关此类环境的任何信息。

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多