浏览器如何请求打开指定应用?其是否能检测到设备已安装该应用?
自定义URL Scheme唤起机制
浏览器实现本地应用唤起的核心依赖是操作系统层面的**自定义URL Scheme(协议头)**机制:
- 桌面/移动端应用在安装时,会主动向操作系统注册专属的协议标识,格式类似
[协议名]://,比如常见的zoommtg://(Zoom会议)、steam://(Steam平台)、weixin://(微信)都属于这类自定义协议。 - 当网页上的链接、JS请求使用了这类自定义协议头时,浏览器不会发起常规的HTTP/HTTPS网页请求,而是直接将请求转发给操作系统处理。
- 操作系统收到请求后,会匹配本地已注册对应协议头的应用,匹配成功就会弹出你截图里的确认唤起弹窗,询问用户是否允许启动对应应用。

浏览器是否提前知晓应用安装状态
浏览器本身不会预先扫描、存储你设备的本地应用安装列表,也不会主动告知网站你的应用安装情况:
- 只有当操作系统匹配到了对应协议的已安装应用,才会向浏览器返回可唤起的信号,浏览器才会弹出确认提示;如果没有匹配到对应应用,浏览器一般会抛出错误提示,或者部分网站会引导你跳转下载对应应用。
- 部分网站会用间接方式判断应用是否安装:比如发起协议唤起请求后,监听1-2秒内浏览器窗口是否失焦(唤起应用会导致浏览器窗口失去焦点),以此推测应用已安装,但这是网站侧自行实现的逻辑,和浏览器无关,浏览器本身不会泄露你的本地应用信息。
内容的提问来源于stack exchange,提问作者Jihai
相关产品推荐
相关产品推荐

