在Firefox扩展程序中,如果我使用自定义方案打开选项卡,由于我的扩展程序未获得该方案模式的授权,该如何关闭它?

问题描述 投票:0回答:1

我在Windows机器上映射了一个自定义方案:“ dbn”。

因此,当我将dbn:/some/arguments放在Firefox地址栏中(或单击这样的链接)时,它将在另一个应用程序中启动。这很好用。

但是,在Firefox扩展程序中,除了打开这样的新标签,我不知道如何“调用”或“激活”此自定义方案:

browser.tabs.create({ url: 'dbn:/some/arguments' });

很好,除了现在我有一个带有dbn:/some/arguments作为URL的打开选项卡。我试图随后从扩展程序中将其关闭,但是我不能这样做,因为:

错误:缺少该标签的主机权限

我的扩展名没有该“主机”的权限。

我尝试通过match_patternsdbn:*授予权限,但是当我尝试重新加载扩展名时会引发错误,因为这些值显然必须使用预期的方案之一(http,https,ftp,等)。

我最终只需要手动关闭选项卡,这并不可怕,但显然不是最佳选择。

所以,有两个问题:

  1. 是否可以通过这样的方式“调用” URL来激活Windows上的自定义映射方案而无需打开选项卡?我想到以这种方式激活我的映射命令的唯一方法是打开选项卡,但是还有其他方法吗?
  2. 如果打开新标签页是唯一的方法,那么如何关闭刚刚打开的标签页而又没有上面提到的权限问题?

更新

我认为这不再是权限。承诺根本无法解决。

browser.tabs.create({ url: "some/url" })
    .then(tab => console.error("I never get here"));

我已经调试了上下,侧面。新选项卡打开,我可以在该操作周围写入日志,但是无论我在其中放置什么内容,then中的代码都不会执行。我试图用try...catch捕获错误,但没有捕获任何错误。

我现在认为以上许可来自其​​他扩展名,而不是我的扩展名。我认为这与主机无关。

firefox-addon chromium firefox-webextensions
1个回答
0
投票

AFA自定义方案,有一个未解决的错误:Extend match patterns to handle custom protocol schemes

您可以通过从tabs.remove()获得的ID来tabs.create()选项卡。

async function fun() {

  // note this is async
  const tab = await browser.tabs.create({url: 'dbn:/some/arguments'});

  // later remove it
  browser.tabs.remove(tab.id);
} 

// or
browser.tabs.create({url: 'dbn:/some/arguments'})
.then(tab => {
  // do what is needed


  // later remove it
  browser.tabs.remove(tab.id);
});
© www.soinside.com 2019 - 2024. All rights reserved.