Chrome 不兼容情况

这篇翻译不完整。请帮忙从英语翻译这篇文章

WebExtensions 被设计为与 Chrome 和 Opera 的扩展兼容:是尽可能的做到,为这些浏览器编写的扩展应该能以最小的修改代价运行在 Firefox 之上。

但是,Firefox 目前只支持有限的被 Chrome 和 Opera  支持的性和 API。我们正在添加更多支持,但许多特性目前尚未支持,并且也许永远不会被支持。

本文列出在 Firefox 中完全或者部分支持的所有特性和 API。当一个功能是部分支持,我们会标出它存在什么差距。

如果某个特性和 API 未在此列出,应安全的假设它是尚未支持的。

manifest.json 特性

完全支持的键值

部分支持的键值

background

Firefox 不支持 "persistent" 属性。后台脚本将在所有时刻加载。

content_scripts

Firefox 目前不支持:

  • include_globs
  • exclude_globs
  • match_about_blank

permissions

Firefox 尚不支持以下权限:

  • activeTab
  • background
  • clipboardRead
  • clipboardWrite
  • geolocation
  • nativeMessaging
  • unlimitedStorage

很显然,它也还不支持 本身就不被支持的 API 的权限。

JavaScript API

完全支持的 API

部分支持的 API

bookmarks

  • Firefox 不支持:
    • getRecent()
    • search()
    • removeTree() (remove 也移除非空文件夹)
    • onCreated
    • onRemoved
    • onChanged
    • onMoved
    • onChildrenReordered
    • onImportBegan
    • onImportEnded
    • BookmarkTreeNodeUnmodifiable
  • Firefox 有特殊的书签,像是“最近添加的书签”和“最近访问的书签”

browserAction

  • Firefox 不支持:
    • enable()disable()
  • 传递到 setPopup() 的相对 URL 是解析到相对的调用者 document,而不是扩展的根。

cookies

  • onChanged events might be subtely different
  • set 创建会话 Cookie 可能失败
  • getAllCookieStores 总是返回一个默认存储并且无标签页
  • 接受来自隐私浏览标签页的 Cookie 是不可能的

extension

  • Firefox 仅支持:
    • getBackgroundPage()
    • getURL()
    • inIncognitoContext 在内容脚本

i18n

  • 在 JavaScript API 中,Firefox 仅支持 getMessage()
  • Firefox 仅支持 @@extension_id@@ui_locale 预定义消息。
  • Firefox 不能本地化 CSS 文件。
  • Strings to be localized must consist entirely of __MSG_foo__ in order for a substitution to be made.

notifications

  • 通知选项只支持:
    • iconUrl
    • title
    • message.
  • 方法只支持:
    • create()
    • clear()
    • getAll().
  • 只支持事件 onClosed
  • Firefox 不提供 byUser 数据。

runtime

  • Firefox 只支持:
    • onStartup()
    • getManifest()
    • getURL()
    • id
    • sendMessage()
    • onMessage
    • onConnect

storage

  • 存储区 Firefox 只支持 local
  • Firefox 不支持 getBytesInUse() 或者 clear()

tabs

  • Firefox 不支持:
    • getCurrent()
    • sendRequest()
    • getSelected()
    • duplicate()
    • highlight()
    • move()
    • detectLanguage()
    • captureVisibleTab()
    • getZoom()
    • setZoom()
    • getZoomSettings()
    • setZoomSettings()

Firefox 将 highlightedactive 同等对待,因为 Firefox 不能同时选中多个标签页。

Firefox 尚不支持 callback 参数到 executeScript()

webNavigation

  • Firefox 不支持:
    • getFrame()
    • getAllFrames()
    • onCreatedNavigationTarget
    • onHistoryStateUpdated
    • 过滤类型和 qualifiers
    • 过滤

onReferenceFragmentUpdated 也会触发 pushState

webRequest

  • Firefox 不支持:
    • handlerBehaviorChanged()
    • onAuthRequired
    • onBeforeRedirect
    • onErrorOccurred
  • 请求可以:
    • 只能在 onBeforeRequest 中取消
    • 修改/重定向只能在 onBeforeSendHeaders 中进行
  • 响应只能在 onHeadersReceived 中修改。
  • windowIdtabId 过滤不支持。
  • "requestBody" 指令在 opt_extraInfoSpec 中不支持。
  • onBeforeRequestonHeadersReceived 中重定向不允许,但允许在 onBeforeSendHeaders 中进行。
  • requestId 在到监听器的参数传递中不支持。

windows

  • onFocusChanged 对于指定的焦点变化将触发多次。
  • create() 不支持 focused, type, 或者 state 选项。
  • update() 只支持 focused 选项。

列入计划的 API

我们还不支持下列 API,但已列入计划,很快完成:

CSS

本地化字符串插值

We currently do not support interpolation of localized strings __MSG_ tokens in extension CSS files: bug 1209184.

相对 URL

We resolve URLs in injected CSS files relative to the CSS file itself, rather than to the page it's injected into.

其他不兼容情况

  • Chrome allows any optional arguments to be omitted, even if followed by other arguments. Firefox currently supports this only under specific circumetances. We recommend only omitting optional arguments at the end of the arguments list, and using null for all other cases.
  • Firefox currently does not allow the let or const statement in ordinary web pages or Web Extensions. While it is possible to enable support for Firefox's variant of the statement using a special <script> tag, this is not recommended. Instead, if your extension code uses let or const statements, we recommend that you transpile them using Babel until support is turned on globally.

文档标签和贡献者

 此页面的贡献者: yfdyh000
 最后编辑者: yfdyh000,