为什么在 Opera 中,指定的扩展 ID 不允许使用“chrome_url_overrides”?

Kal*_*sev 5 opera opera-extension

我正在制作一个跨浏览器扩展,它覆盖了标准的“新标签”页面。

有一个manifest.json密钥,称为chrome_url_overrides

"chrome_url_overrides": { "newtab": "index.html" }
Run Code Online (Sandbox Code Playgroud)

它适用于 Chrome 和 Firefox!但是在 Opera (45.0) 中,当我尝试加载扩展时出现以下错误:

指定的扩展 ID 不允许使用“chrome_url_overrides”。

根据我在MDN chrome_url_overrides docs 中读到的内容,Opera 支持这一点。

现在我不确定 Opera 是否一般不允许这样做,或者是否有办法激活它?


编辑:我在 Opera 论坛中发现了一个类似的、尚未回答的、已有 3 个月历史的帖子。

Gor*_*nov 2

其实Opera现在官方不支持 chrome_url_overrides您可以在您引用的 MDN 页面上找到一条证据,并且 Opera 代表在他们的论坛中确认了这一点。

在 Opera 中实现新选项卡扩展的一个潜在解决方法(实际上这也应该适用于其他浏览器)是使用带有以下代码的后台脚本:

const redirectURLS = [
  "opera://startpage/",
  "browser://startpage/",
  "chrome://startpage/"
];

chrome.tabs.onCreated.addListener(function(tab) {
  for (let i = 0; i < redirectURLS.length; i++) {
    if (tab.url === redirectURLS[i]) break; // user is trying to open startpage
    if (i == redirectURLS.length - 1) return; // Tab is not trying to open a startpage
  }
  chrome.tabs.update(tab.id, { url: "index.html" });
});
Run Code Online (Sandbox Code Playgroud)

这样做将检查用户是否尝试打开新选项卡,如果是这种情况,它将打开安装插件时附带的自定义 index.html 页面。这是一个 hacky 和肮脏的,不确定它是否会被 Opera 接受,但对于那些拼命试图在其他 Opera 插件中获得新标签扩展的人来说,这可能是一条拯救之​​路。

有趣的事实: Opera 开发并分发了一个插件,可以帮助您从 Opera 上的 chrome 扩展商店安装 chrome 扩展,但新的选项卡扩展不起作用,并且在安装时失败,并显示以下消息:

[兼容性通知] 请注意,此扩展需要 Opera 不支持的 API。它仍然可以在 Opera 中运行,因此请完成安装以验证。