如何在不打开空白选项卡的情况下从扩展名启动自定义URI?

时间:2018-10-04 05:53:06

标签: google-chrome-extension

我正在尝试创建一个chrome扩展程序,以打开一个自定义URI(然后将在另一个已注册到系统的应用程序中打开一个已注册的协议URI)。

例如,我的自定义协议URI为mycustomapp://input-arguments-here

如果我创建一个带有锚点<a href="mycustomapp://input-arguments-here">Link</a>的HTML页面,则会按预期打开带有input-arguments-here的自定义应用。

我创建了一个Chrome扩展程序来打开我的自定义URI。

function openCustomURIScheme(info, tab) {
  chrome.tabs.create({
      url: "mycustomapp:/" + info.linkUrl
    },
    function(newTab) {
      setTimeout(function() {
        chrome.tabs.remove(newTab.id);
      }, 250);
    }
  );
}

在Firefox中,这很好用。它打开对话框,提示用户“打开”扩展名。同时,它会关闭在我们创建标签页转到自定义URI时打开的空白标签页。

在Chrome中,这不起作用。调用chrome.tabs.remove(newTab.id)时,它关闭选项卡,提示在外部应用程序中打开链接。

如果我忽略了这一点:

  setTimeout(function() {
    chrome.tabs.remove(newTab.id);
  }, 250);

它可以工作,但是每次启动自定义URI时,我都会得到一个空选项卡。

如何从chrome扩展程序中打开自定义URI,而又不留下空白的标签窗口?

1 个答案:

答案 0 :(得分:0)

这是我解决问题的方法。

我创建了一个“安装时”处理程序,该处理程序在安装扩展名时告诉显示HTML,它将指示用户单击指向自定义URI的链接,并告诉用户单击自定义URI上的“始终”复选框,以便将来不会提示他们。

类似的东西:

  

为了完成安装,请单击下面的此链接,然后   出现提示时,选择“始终在此处自定义应用程序中打开链接”。

然后,现有解决方案会在该选项卡中的选项卡中打开它,然后在毫秒的延迟后像在Firefox上一样关闭该选项卡,因为没有更多提示。