【问题标题】:Firefox add-on sdk sidebar incompatibility - How do I warn the user?Firefox add-on sdk 侧边栏不兼容 - 如何警告用户?
【发布时间】:2014-03-10 19:41:14
【问题描述】:

我已经使用插件 sdk 创建了一个插件。我的插件使用 ui/sidebar 模块。如果用户使用旧版本的 Firefox(例如 Firefox ESR 24.1.1)安装我的插件,浏览器会通知用户插件已成功安装。但是,插件实际上会产生以下错误(在浏览器控制台中可见):

Error: Module `sdk/ui/sidebar` is not found at resource://gre/modules/commonjs/sdk/ui/sidebar.js
resource://gre/modules/commonjs/sdk/loader/cuddlefish.js 133

这是有道理的,因为我已经读过侧边栏模块是在版本 26 中引入的。我的理解是,尽管如此,由于浏览器的“默认兼容”功能,插件会安装。

但是,我发现这种行为对于我的插件来说是非常不可取的。在不知道查看控制台的情况下,用户不会知道安装失败。通知用户插件不兼容的最佳做法是什么?有没有办法强制执行 minVersion?我是否应该在侧边栏 require 语句周围放置一个 try 块,并尝试向用户发出某种警报,通知他们不兼容?

是否有解决此问题的标准方法?任何建议都会很棒。谢谢。

更新: minVersion 一直设置为 21.0。

MDN 上的This page 让我认为 SDK 的最新版本对应于当前版本的 Firefox(当时是 27 版本)。但是,看起来新版本的 SDK 已经有一段时间没有发布了。我使用的是 1.15 版(我从 this page 下载的)。由于前一阵子发布了 1.15,当时 Firefox 的当前版本是 21.0,因此将 minVersion 设置为 21.0。发帖前我没检查,所以我的印象是当 minVersion 为 27 时,插件已安装在 Firefox 24 上。

【问题讨论】:

    标签: javascript firefox sdk firefox-addon firefox-addon-sdk


    【解决方案1】:

    当您将插件上传到 AMO 时,您必须说明的有关插件的一件事是与 Firefox(或 SeaMonkey 或 Fenec)的兼容性:

    除此之外,您可以在 your-addon.xpi 中编辑 install.rdf 文件(注意它是一个 zip 文件),其中包含以下几行:

    <!-- Firefox -->
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>21.0</em:minVersion>
        <em:maxVersion>25.0a1</em:maxVersion>
      </Description>
    </em:targetApplication>
    

    当您作为用户尝试安装插件(即 .xpi 文件)时,Firefox 会检查这些行。

    您必须做的是正确设置最小和最大版本,以避免不兼容的浏览器安装您的插件。

    【讨论】:

    • matagus 是对的。有关接受的版本号列表,请参见此处:Valid Application Versions
    • 啊,我现在觉得很傻。我实际上并没有检查 install.rdf 文件中的 minVersion,因为 MDN 上的this article 说“minVersion 设置为当前发布的 Firefox”。因此,我假设 Firefox 忽略了 minVersion。但是,事实证明它设置为 21.0,因此是我的问题。感谢您的提示。
    • @Pwnosaurus 不客气。如果我的回答有用,请投票并将其标记为有效:这样我们就可以继续构建 stackoverflow 内容。
    • @matagus 我通过解压缩 xpi、更改文件然后重新压缩来修改 install.rdf 中的 minVersion。但是,我现在安装后出现错误。 Firefox 说插件安装成功,但是浏览器控制台出现以下错误。"Error opening input stream (invalid filename?)" runner.js:162 \n "Error opening input stream (invalid filename?)" promise.js:133知道为什么吗? p.s.我应该将其作为一个新问题打开吗?
    • 另外值得注意的是,我目前没有使用 AMO,只是手动安装了.xpi
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多