Chrome 插件移植 Firefox 的一点记录

下面是移植过程中遇见的几个不兼容状况。更多不兼容情况及细节可到 Chrome_incompatibilities 查看。

  1. Firefox 不支持在后台页调用 alert()、confirm() 等函数

    这些函数 Chrome 是支持在后台页中调用的。如果想要在 Firefox 中给类似于用 alert() 给用户发送通知。一种常用的思路是在网站中注入 content.js 脚本,借助于注入在网站中的 content.js 调用 alert() 函数,并借助于从后台页中发来的消息来触发 alert()。

    这的确可以解决问题,但更好的方式是在网页中注入或是在后台页中使用 sweetalert.js,sweetalert 是一个开源项目,可轻松产生多种多样的通知,样式也很美观。现在 sweetalert 有两个开源项目 sweetalertsweetalert2。第一个项目已经很久没有更新了,而且第二个项目最近都在更新而且强大更多,所以使用第二个项目要更好。

  2. Firefox 使用 storage API 需要在 manifest.json 中设置 id

    设置方法及其他细节见 web_accessible_resources

  3. 出于安全的考虑,Firefox 中不支持借助于 js 模拟点击

    这意味着用 clipboard.js 复制文本的时候不能像在 Chrome 中那样在后台用 .click() 模拟点击实现复制文本。在 Firefox 中,需要借助于 content.js 在网页内显示出复制按钮并绑定事件,也就是说,用 clipboard.js 的时候复制是需要被看见的,你必须提供给使用者用于手动点击的复制按钮,让用户手动点击实现复制。

  4. manifest 报错

    在你调试插件的时候,可能会报错 Reading manifest: Warning processing background.persisten: An unexpected property was found in the WebExtension manifest.,出现这个警告是因为 manifest.json 文件中有 Firefox 中不支持的某些 manifest 键。

    比如 options_page 和 persisten,在 Chrome 中,为了支持低版本浏览器,注册 options 的时候常常这样写:

    "options_page": "options/options.html",
    "options_ui":
       {
        "page": "options/options.html"
       }
    

    这在 Firefox 中是会产生警告的,因为 Firefox 明确指明不建议使用 options_page 键(见 options_page

    另外 persisten 也是不被支持的,所以下面的写法会报错:

    "background": {
        "page": "background/background.html",
        "persisten": false
       }
    
  5. 某些 Chrome API 在 Firefox 中不支持

    这意味着某些扩展的移植比较难,需要作出比较大的改变。可以到 https://www.extensiontest.com/ 中检查扩展中使用的 API 是否都得到了支持。

  6. 似乎不支持 popup.js 动态注入脚本

    这一点没有深究,但似乎是不支持的,需要通过在 popup.js 中调用 background.js 中的函数实现动态注入,即需要在后台页使用 Chrome.tabs.executeScript()。

  7. 动态注入脚本的文件路径与 Chrome 不同,但 manifest.json 文件写 content.js 等文件时相同

    Chrome 中 Chrome.tabs.executeScript({file:"inject/inject.js"}) 在 Firefox 中要写成 Chrome.tabs.executeScript({file:"/inject/inject.js"}) 而 manifest.json 中注册 content.js 都写成

    "content_scripts": 
    [
          {
        "matches": ["*://www.baidu.com/*"],
        "js": ["content/content.js"]
          }
    ]
    

    具体可见 executeScript

  8. 压缩方式

    在发布或更新插件的时候,插件的压缩包创建有点不同。

    Chrome 的打包方式:在 manifest.json 的父文件夹上右键,点击“添加到压缩文件”,选择为 zip 压缩即可。

    Firefox 的打包方式见 Publishing_your_WebExtension

  9. 报错 Unsafe assignment to innerHTML

    在你打包好扩展上传到网站准备发布的时候,Firefox 可能会警告 Unsafe assignment to innerHTML,这是因为在代码中你直接将值赋值给 innerHTML 属性,出于安全的考虑,Firefox 会在发布之前给出警告并可能因此而驳回你的插件。解决方法见 quick-fix-the-unsafe_var_assignment-warning-in-javascript

更多有关 Firefox 扩展开发的信息可到 WebExtensions 查看。

猜你喜欢

转载自www.cnblogs.com/Higurashi-kagome/p/13381352.html