为何window.location跳转Scheme无效,HTML链接却可唤起APP?
为什么JS修改window.location无法唤起APP,但标签可以?
- 浏览器安全拦截机制:现代浏览器为了防范恶意网站未经许可跳转,会拦截脚本主动发起的自定义协议(比如
myapp://)跳转。但标签的跳转是用户主动点击触发的,属于明确的用户交互行为,浏览器会默认放行。 - 触发时机的合法性要求:如果JS代码是页面加载时自动执行,或者没绑定到用户交互事件(比如点击、触摸),浏览器会认定这是非用户主动操作,直接阻止跳转。而标签的点击动作完全符合浏览器要求的“用户主动触发”条件。
- 两种跳转的处理逻辑差异:浏览器对标签的跳转有专门的处理链路,会优先校验协议是否能唤起对应应用;但通过
window.location.href或replace发起的跳转,部分浏览器会先判定操作的触发来源,一旦发现是无用户交互的脚本,就会拦截掉。
内容的提问来源于stack exchange,提问作者C Taque
相关产品推荐
相关产品推荐

