打开自定义协议网址在Chrome中无法正常运行

Pav*_*vlo 9 url google-chrome

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

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

document.body.appendChild(a);
a.click();
Run Code Online (Sandbox Code Playgroud)

如果未安装该应用,则在某些PC上Chrome会无声地失败,而在其他PC上则会显示此窗口:

发射

这种行为在哪里定义?

Uzb*_*jon 0

应用程序与 URI 架构的关联

如果你想注册你的应用程序来处理 Windows 中的特定 URI 架构,那么你应该在注册表中注册它。MSDN 文章对此进行了解释,谷歌搜索“将应用程序注册到 URI 方案”给出了大量示例。

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    shell/
      open/
        command/
          (Default) PathToExecutable
Run Code Online (Sandbox Code Playgroud)

Web 应用程序架构注册

您可以使用 Google Chrome 注册自定义协议处理程序navigator.registerProtocolHandler(Firefox 也具有该功能)。

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

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

或者,如果您正在开发 Chrome 应用程序,则可以在清单文件中注册处理程序。

"url_handlers": {
  "view_foo_presentation": {
    "matches": [
      "https://www.foo.com/presentation/view/*"
    ],
    "title": "View Foo presentation"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您的回答,但这不是我想要的。我知道 `registerProtocolHandler`,但我想打开一个桌面应用程序,而不是一个网络应用程序。 (3认同)
  • 我知道如何实施它。我的问题是关于 Chrome 的行为。 (2认同)