在 Chrome 中打开自定义协议 URL 无法始终如一地工作

Posted

技术标签:

【中文标题】在 Chrome 中打开自定义协议 URL 无法始终如一地工作【英文标题】:Opening custom protocol URL doesn't work consistently in Chrome 【发布时间】:2016-07-20 04:58:27 【问题描述】:

以下代码假设在外部应用程序中打开一个 URL:

var a = document.createElement('a');
a.href = 'myprotocol:jdoe@example.com;fromuser=John%20Doe;mode=audiovideo';

document.body.appendChild(a);
a.click();

当应用未安装时,Chrome 在某些 PC 上会静默失败,而在其他 PC 上会显示此窗口:

这种行为在哪里定义?

【问题讨论】:

你找到答案了吗?我有同样的问题。谢谢 【参考方案1】:

与 URI 架构的应用程序关联

如果您想在 Windows 中注册您的应用以处理特定的 URI 架构,那么您应该在注册表中注册它。 MSDN article 对此进行了解释,谷歌搜索“Registering an Application to a URI Scheme”提供了大量示例。

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    shell/
      open/
        command/
          (Default) PathToExecutable

Web 应用架构注册

您可以通过 Google Chrome 使用 navigator.registerProtocolHandler register a custom protocol handler(Firefox 也有该功能)。

navigator.registerProtocolHandler(
    'web+mystuff', 'http://example.com/rph?q=%s', 'My App');

请注意,您的协议必须以web+ 开头。否则你会得到SECURITY_ERR: DOM Exception 18 错误。

或者,如果您正在开发 Chrome 应用,那么您可以在清单文件中 register your handlers。

"url_handlers": 
  "view_foo_presentation": 
    "matches": [
      "https://www.foo.com/presentation/view/*"
    ],
    "title": "View Foo presentation"
  

您还可以查看 Chrome 网址 (chrome://chrome-urls/),看看是否可以在任何设置中更改它。

【讨论】:

感谢您的回答,但这不是我要找的。我知道registerProtocolHandler,但我想打开一个桌面应用程序,而不是一个网络应用程序。 @Pavlo 这称为 URI Schema 注册。我添加了一个示例和有关如何在 Windows 中执行此操作的链接。我猜那是你的目标操作系统。 我知道如何实现它。我的问题是关于 Chrome 的行为。

以上是关于在 Chrome 中打开自定义协议 URL 无法始终如一地工作的主要内容,如果未能解决你的问题,请参考以下文章

浏览器自定义协议

如何在 Android 应用程序的对话框中打开 Chrome 自定义选项卡

Google Chrome 自定义协议(PROTOCOL)问题的处理

在 Internet Explorer 中使用同步可插入协议的自定义 url 协议的最大长度是多少?

如何在 Windows 中注册自定义 URL 协议?

在 chromebook/chrome 操作系统上注册 Android 应用程序的协议处理程序以打开外部链接?