【问题标题】:Opening custom protocol URL doesn't work consistently in Chrome在 Chrome 中打开自定义协议 URL 无法始终如一地工作
【发布时间】: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 上会显示此窗口:

这种行为在哪里定义?

【问题讨论】:

  • 你找到答案了吗?我有同样的问题。谢谢

标签: google-chrome url


【解决方案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 的行为。
猜你喜欢
  • 2019-07-29
  • 1970-01-01
  • 2013-02-26
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多