我在Windows机器上映射了一个自定义方案:“ dbn”。
因此,当我将dbn:/some/arguments
放在Firefox地址栏中(或单击这样的链接)时,它将在另一个应用程序中启动。这很好用。
但是,在Firefox扩展程序中,除了打开这样的新标签,我不知道如何“调用”或“激活”此自定义方案:
browser.tabs.create({ url: 'dbn:/some/arguments' });
很好,除了现在我有一个带有dbn:/some/arguments
作为URL的打开选项卡。我试图随后从扩展程序中将其关闭,但是我不能这样做,因为:
错误:缺少该标签的主机权限
我的扩展名没有该“主机”的权限。
我尝试通过match_patterns
值dbn:*
授予权限,但是当我尝试重新加载扩展名时会引发错误,因为这些值显然必须使用预期的方案之一(http,https,ftp,等)。
我最终只需要手动关闭选项卡,这并不可怕,但显然不是最佳选择。
所以,有两个问题:
更新
我认为这不再是权限。承诺根本无法解决。
browser.tabs.create({ url: "some/url" })
.then(tab => console.error("I never get here"));
我已经调试了上下,侧面。新选项卡打开,我可以在该操作周围写入日志,但是无论我在其中放置什么内容,then
中的代码都不会执行。我试图用try...catch
捕获错误,但没有捕获任何错误。
我现在认为以上许可来自其他扩展名,而不是我的扩展名。我认为这与主机无关。
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);
});