在 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)问题的处理