如何打开深层链接而不在网络扩展中创建新选项卡或窗口

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

我有一个锚标记,选择该标记后应打开指向外部应用程序(黑曜石)的链接。这是一个示例链接:obsidian://action?param1=value¶m2=value。

我希望单击锚点可以打开外部应用程序,而无需创建窗口或选项卡。

当前浏览器:

  • 火狐

当前权限:

  • 标签
  • 存储

如果可能的话,我正在尝试避免hosts_permissions。

尝试过的几种方法:

在下面的示例中,我对“浏览器”命名空间的使用相当于 chrome 命名空间。

  • 选择锚点 href
    • 这会在弹出窗口内打开确认窗口,由于我的弹出窗口尺寸较小,因此会切断确认窗口
  • window.open()
    • 这将打开一个新选项卡,当选择提示窗口上的打开按钮时,该选项卡将关闭。如果关闭提示,则会保留一个空选项卡
  • 浏览器.scripting.executeScript
    • 这需要脚本权限,这很好,但是在注入的脚本中打开 URL 需要声明对选项卡 URL 的访问权限(在我的例子中是“hosts_permissions”)
  • content_script 中的 window.open(message.value, '_self')
    • 这工作得很好,除了它需要 content_script 并且我需要匹配所有 URL。由于我想避免hosts_permissions,所以这不合适
  • 浏览器.tabs.create()
    • 与 window.open() 相同的行为

也许还有另一种方法或我没有想到的东西,例如能够调整提示窗口的大小?

javascript google-chrome-extension browser firefox-addon firefox-addon-webextensions
1个回答
0
投票

经过更多研究,我发现

browser.tabs.update()
非常适合我的用例!它在不打开新选项卡或窗口的情况下调用深层链接,并以某种方式避免更改选项卡 URL。我认为外国协议与此有关。

在我的扩展设置中,我直接在background_script / service_worker中调用它。

示例:

async function openDeeplink(deeplink) {
     const [activeTab] = await browser.tabs.query({active: true, currentWindow:true});
     browser.tabs.update(activeTab.id, { url: deeplink });
}

© www.soinside.com 2019 - 2024. All rights reserved.