Firefox附加组件使用“jpm run”,但不是使用“jpm xpi”生成的whith .xpi文件

时间:2015-10-18 17:48:42

标签: firefox-addon firefox-addon-sdk

我正在使用Firefox Add-on SDK开发Firefox附加组件。 我已经关注了Getting Started tutorial

Firefox版本:41.0.2
我的流程是:

  1. jpm run - >好的,加载项工作正常
  2. jpm xpi - >确定:创建 @ myAddon.xpi (JPM [info]在...成功创建 .xpi
  3. 使用 @ myAddon.xpi - > NOK
    当我尝试在我的Firefox中安装加载项(加载项 - >从文件安装 - > @ myAddon.xpi )时,我收到一条消息“安装成功”。看起来不错。但是,附加组件不起作用。没有任何事情发生。
  4. 那么,为什么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);
    });
    

    编辑(从评论中移出):
    我找到了一些有趣的东西......根据FireFox的隐私级别,插件可以工作与否。 (选项 - >隐私 - >历史“记住历史”或“永远不记得历史”) - 记住历史“ - > addOn确定 - ”永远不要记住历史“ - > addOn NOK任何想法为什么

1 个答案:

答案 0 :(得分:0)

如您所知,如果您希望自己的Firefox附加SDK加载项能够在Private Browsing mode中使用,则需要添加值为private-browsing的密钥true您的package.json文件。

如果您不使用其他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)来检查是否在私有窗口或选项卡中。如果您在这样的窗口或标签中,则无需存储有关此类环境的任何信息。