使用chrome.*或browser.*编写的Firefox / Chrome / MS Edge扩展程序。

6
所以我没有找到针对使用chrome.* 或 browser.* 的具体说明。在一些Web扩展示例中,它使用browser.* (browser.runtime.getManifest();) https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/getManifest,而在其他示例中则使用chrome.* (chrome.notifications.create), https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/notifications
我不完全确定它们之间有什么区别。它是上下文相关的吗?在Firefox的内容脚本和后台脚本中,chrome.* 和 browser.* 都可用。我还查看了IE的文档,并且他们使用了browser.* (在他们的文档中没有看到chrome.*)。
我想知道它们之间的区别,Chrome扩展程序只使用chrome.* 还是也有browser.*(IE只有browser.*)?

高度相关,可能是重复的:使用chrome.tabs与browser.tabs以实现浏览器兼容性 - Makyen
截至2021年,有一种方法可以制作适用于Chrome、Firefox、Safari的插件,请参见https://stackoverflow.com/questions/68571983/web-extension-browser-plugin-for-chrome-firefox-safari-standard-reference-and。 - Paul Verest
3个回答

9

谷歌浏览器只有chrome.apis。微软Edge浏览器只有browser.apis。火狐浏览器为了兼容现有的Chrome扩展程序,同时具备了browser.apis和chrome.apis。

主要区别在于,在Firefox中,browser.apis使用promises,而chrome.apis则使用callbacks。


Chrome的chrome.apis也使用回调函数吗?我还快速查看了Edge的browser.storage,它不使用promises吗? https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9420301/基本上,我正在研究如何使其在不必更改每个JS文件的情况下最大程度地跨浏览器兼容,其中调用*.api在不同浏览器之间或者说这种情况无论如何都会发生? - Knight Yoshi
需要注意的是,我正在使用Firefox进行开发,并利用它从browser.*中提供的promises。 - Knight Yoshi
1
@KnightYoshi,如果你想要跨浏览器兼容性,请使用chrome.*而不是browser.*。从chrome.*(回调)调用到它们的browser.*(Promise)等效物相对容易进行填充。当您调用browser.* API时,回调函数信息不存在于API调用中,因此很难进行反向操作。此外,即使您不进行填充,使用chrome.*也可以为您提供Chrome和Firefox。这两个浏览器占据了大部分市场份额(您可以为其余部分进行填充)。 - Makyen

1

0

我认为你现在最好的解决方案是使用回调函数而不是 Promise,因为它们适用于 Chrome、Firefox 和 Edge。此外,你可以使用类似于 browser = browser || chrome; 的代码来解决 Chrome vs Browser 的问题,以及使用 browser.runtime.lastError; 来处理错误。Firefox 支持 API 的回调和 Promise 两个版本,回调版本将适用于 Chrome 和 Browser 对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接