关于 URL Protocol
Web本身支持通过自定义URL Protocol来调用本地的应用程序,例如只需要在浏览器中输tencent://(tencent://为QQ的自定义URL Protocol)就能够使得浏览器去寻找注册表并打开对应的本地应用程序。
基于此,只需要在开发的APP中定义好协议地址。然后在web中使用a标签链接就可以打开APP。
但是可能用户可能还没有安装APP,这里怎么做检测呢?
检测是否唤醒成功
在网上搜索了一会儿解决方案,大多的回答也都是 protocolcheck.js
一种浏览器与另一种浏览器的实现方式不同,有时取决于您使用的是哪种操作系统。他们中的大多数都是黑客,这意味着解决方案并不是最漂亮的。
重要功能:如果当前选项卡在尝试检测焦点时未处于活动状态,那么它会在焦点回到当前选项卡上后立即尝试打开协议。当有一个长时间运行的进程并且在该进程结束时我们需要检测是否可以使用自定义协议打开该文件时,它更有用。用户可能在不同的选项卡或应用程序上工作,因此在这种情况下,库会在当前选项卡获得焦点后立即尝试检测自定义协议。
- Chrome和iOS:使用window onBlur检测浏览器焦点是否被盗。当焦点被盗时,它假定自定义协议启动外部应用程序,因此它存在。
- Firefox (Version >= 64): 使用隐藏的iframe onBlur 检测焦点是否被盗。当焦点被盗时,它假定自定义协议启动外部应用程序,因此它存在。
- Firefox(版本 < 64):尝试在隐藏的 iframe 中打开处理程序并在自定义协议不可用时捕获异常。
- Safari:使用隐藏的iframe onBlur检测焦点是否被盗。当焦点被盗时,它假定自定义协议启动外部应用程序,因此它存在。
- Win 8/Win 10 中的 IE 和 Edge:最干净的解决方案。Windows 8 和 Windows 10 中的 IE 和 Edge 确实提供了一个 API 来检查自定义协议处理程序是否存在。不支持其他较旧的 IE 版本。