这篇翻译不完整。请帮忙从英语翻译这篇文章。
WebExtensions 被设计为与 Chrome 和 Opera 的扩展兼容:是尽可能的做到,为这些浏览器编写的扩展应该能以最小的修改代价运行在 Firefox 之上。
但是,Firefox 目前只支持有限的被 Chrome 和 Opera 支持的性和 API。我们正在添加更多支持,但许多特性目前尚未支持,并且也许永远不会被支持。
本文列出在 Firefox 中完全或者部分支持的所有特性和 API。当一个功能是部分支持,我们会标出它存在什么差距。
如果某个特性和 API 未在此列出,应安全的假设它是尚未支持的。
manifest.json 特性
完全支持的键值
applications
browser_action
page_action
default_locale
description
manifest_version
name
version
web_accessible_resources
部分支持的键值
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
- alarms
- contextMenus
- pageAction
- 传递到
setPopup()
的相对 URL 出解析到相对的调用者 document,而不是扩展的根。
- 传递到
部分支持的 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 将 highlighted
和 active
同等对待,因为 Firefox 不能同时选中多个标签页。
Firefox 尚不支持 callback
参数到 executeScript()
。
webNavigation
- Firefox 不支持:
getFrame()
getAllFrames()
onCreatedNavigationTarget
onHistoryStateUpdated
- 过滤类型和 qualifiers
- 过滤
onReferenceFragmentUpdated
也会触发 pushState
。
webRequest
- Firefox 不支持:
handlerBehaviorChanged()
onAuthRequired
onBeforeRedirect
onErrorOccurred
- 请求可以:
- 只能在
onBeforeRequest
中取消 - 修改/重定向只能在
onBeforeSendHeaders
中进行
- 只能在
- 响应只能在
onHeadersReceived
中修改。 - 按
windowId
和tabId
过滤不支持。 "requestBody"
指令在opt_extraInfoSpec
中不支持。- 在
onBeforeRequest
或onHeadersReceived
中重定向不允许,但允许在onBeforeSendHeaders
中进行。 requestId
在到监听器的参数传递中不支持。
windows
onFocusChanged
对于指定的焦点变化将触发多次。create()
不支持focused
,type
, 或者state
选项。update()
只支持focused
选项。
列入计划的 API
我们还不支持下列 API,但已列入计划,很快完成:
- commands
- Devtools (mostly panels)
- downloads
- history
- idle
- omnibox
- permissions
- Native messaging (runtime.connectNative)
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
orlet
statement in ordinary web pages or Web Extensions. While it is possible to enable support for Firefox's variant of the statement using a specialconst
<script>
tag, this is not recommended. Instead, if your extension code useslet
orconst
statements, we recommend that you transpile them using Babel until support is turned on globally.