打开自定义协议网址并不能在Chrome中保持一致

时间:2016-03-31 16:08:50

标签: google-chrome url

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

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

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

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

Launch

这种行为在哪里定义?

1 个答案:

答案 0 :(得分:0)

URI Schema的应用程序关联

如果要在Windows中注册应用程序以处理特定的URI架构,则应在注册表中注册。我在MSDN article和Google搜索" 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 App架构注册

您可以使用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/),看看是否可以在任何设置中进行更改。