MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Chrome 不兼容情况

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

WebExtensions 被设计为兼容 Chrome 和 Opera 的扩展:我们会尽力确保能运行在这些浏览器上的扩展只需少许修改就能在 Firefox 上运行。

然而,Firefox 目前只支持有限的 Chrome 和 Opera 支持的功能和 API。我们正在努力支持更多特性,但仍有若干特性尚未支持,并且某些特性我们不会支持。

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

如果某个特性或 API 未在此列出,应当假设它尚不受支持。

JavaScript API

回调与 chrome.* 命名空间

在 Chrome 中,扩展通过使用 chrome 命名空间来访问私有 JavaScript API:

chrome.browserAction.setIcon({path: "path/to/icon.png"});

WebExtensions 通过使用 browser 命名空间来访问等价的 API:

browser.browserAction.setIcon({path: "path/to/icon.png"});

许多 API 是异步的。在 Chrome 中,异步的 API 使用回调来返回值,使用 runtime.lastError 来与错误交互(communicate):

function logCookie(c) {
  if (chrome.extension.lastError) {
    console.error(chrome.extension.lastError);
  } else {
    console.log(c);
  }
}

chrome.cookies.set(
  {url: "https://developer.mozilla.org/"},
  logCookie
);

在 WebExtensions 中应使用 promises 来访问等价的 API:

function logCookie(c) {
  console.log(c);
}

function logError(e) {
  console.error(e);
}

var setCookie = browser.cookies.set(
  {url: "https://developer.mozilla.org/"}
);
setCookie.then(logCookie, logError);

为了帮助移植,Firefox 的 WebExtension 实现支持 chrome 与回调和 browser 与 pomise。这意味着许多 Chrome 扩展无须修改就能在 Firefox 上运行。然而并不是 WebExtension 标准的一部分,也许不会被所有兼容 WebExtension的浏览器支持。

如果你在编写 WebExtension 时确实要用到 browser and promise,我们也开发了polyfill 来保证扩展可以在 Chrome 里运行:https://github.com/mozilla/webextension-polyfill.

部分受支持的 API

页面 JavaScript API 的浏览器支持情况 包含了介绍受 Firefox 任意程度支持的 API 的兼容性表格。若对 API 的支持存在须要注意的事项,并标有星号“*”,且在 API 的参考页面会介绍注意事项。

这些表格由 在 GitHub 上以 JSON 文件存储的兼容性数据生成。

本节剩余部分介绍了表格未涵盖的兼容性问题。

notifications

  • For notifications.create(), with the "basic" type, iconUrl is optional in Firefox. It is required in Chrome.
  • Notifications are cleared immediately when the user clicks on them. This is not the case in Chrome.
  • If you call notifications.create() more than once in rapid succession, Firefox may end up not displaying any notification at all. Waiting to make subsequent calls until within the chrome.notifications.create() callback function is not a sufficiently long delay to prevent this from happening.

tabs

  • In Firefox, relative URLs passed into tabs.executeScript() or tabs.insertCSS() are resolved relative to the current page URL. In Chrome, these URLs are resolved relative to the add-on's base URL. To work cross-browser, you can specify the path as an absolute URL, starting at the add-on's root, like this:

    /path/to/script.js
  • 在 Firefox 中,用 tabs.query() 根据 URL 查询标签页需要有"tabs" 权限。在 Chrome 中,没有“tabs”权限也可以,但结果将限制在 URL 匹配主机权限的标签页。

webRequest

  • 在Firefx中,只有原网址使用 http: 或 https: 协议时所请求的重定向才有效。

windows

  • Firefox 中 onFocusChanged 对于指定的焦点变化将触发多次。

列入计划的 API

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

我们将不只支持上述 API,但他们是我们当前优先考虑的。

其他不兼容情况

CSS 中的 URL

Firefox 解析 CSS 中嵌入的 URL  时,若 URL 时相对地址,将是相对 CSS 文件,而不是被嵌入的网页文件。

更多不兼容情况

Firefox 不支持从后台标签页使用 alert()、confirm() prompt()

web_accessible_resources

在 Chrome 中,若资源在 web_accessible_resources 中列出,即可通过 chrome-extension://<your-extension-id>/<path/to/resource> 访问。每个扩展的 ID 都是固定的。

Firefox 以不同方式进行实现。它使用一个随机的 UUID,在每个 Firefox 实例中都不同:moz-extension://<random-UUID>/<path/to/resource>。这一随机性可能会让你无法实现某些东西,例如你无法将特定扩展的 URL 添加到另一个域名的 CSP 策略中。

Manifest "key" 属性

对于解包了的扩展,Chrome 允许将 "key" 属性添加到 manifest,以确保在不同机器上的扩展 ID 不变。这主要在使用 web_accessible_resources 时有用。鉴于 Firefox 为 web_accessible_resources 使用随机的 UUID,此属性不受支持。

manifest.json 特性

完全受支持的键

部分受支持的键

background

Firefox 不支持“persistent”属性。后台脚本始终保持加载。

chrome_settings_overrides

在 Firefox 中,只“homepage”受支持。

chrome_url_overrides

若有两个或以上的附加组件定制了新标签页,Firefox 只会接受最先运行的。在 Chrome 中,只接受最后运行的。

commands

Firefox 不支持:

  • global
  • any of the media keys: "MediaNextTrack", "MediaPlayPause", "MediaPrevTrack", "MediaStop"

content_scripts

In Firefox, content scripts declared in the manifest will be injected into existing tabs on each extension load. In Chrome, content scripts do not apply to tabs already open when the extension is loaded.

content_security_policy

Firefox 不支持:

  • "http://127.0.0.1" or "http://localhost" as script sources: they must be served over HTTPS.

options_ui

Firefox 不支持:

  • chrome_style

permissions

Firefox 不支持下列权限:

  • background
  • geolocation
  • unlimitedStorage

显然,对于本身不受支持的 API,相应的权限也不受支持。Obviously, it doesn't support permissions for APIs that are themselves not supported.

protocol_handlers

这个键在 Chrome 中不受支持。

incognito

Firefox 不支持下列隐身(隐私浏览)模式:

  • split

文档标签和贡献者

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