为什么在 Opera 中指定的扩展 ID 不允许 'chrome_url_overrides'?

Why in Opera the 'chrome_url_overrides' is not allowed for specified extension ID?

我正在制作一个跨浏览器扩展,它会覆盖标准 "New Tab" 页面。

有一个 manifest.json 键,叫做 chrome_url_overrides:

"chrome_url_overrides": { "newtab": "index.html" }

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

'chrome_url_overrides' is not allowed for specified extension ID.

根据我在 MDN chrome_url_overrides docs 中阅读的内容,Opera 支持它。

现在我不确定 Opera 是否通常不允许这样做,或者是否有激活它的方法?


编辑: 我在 Opera 论坛中找到了 similar, unanswered yet, 3-months-old thread

Opera 的 Acceptance Criteria 说:

Extensions cannot replace Opera’s default start page.

即使您设法实现了目标并替换了标准 "New Tab" 页面,扩展程序也不会通过审核。

解决方法包括分配一个键盘快捷方式来打开您的页面,或者从浏览器操作按钮启动它。

实际上Opera现在正式不支持chrome_url_overrides。在 MDN page that you referenced and it was confirmed by an Opera representative in their forum.

上可以找到一个证据

在 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" });
});

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

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

[Compatibility notice] Please, be aware that this extension requires APIs that are not supported in Opera. It still can work in Opera, so complete installation to verify.