Android Deep Linking在Chrome环境下运行异常问题咨询
原因确认
你遇到的现象确实是Chrome唤起应用后脚本执行被中止导致的:
Chrome在通过window.open触发自定义URI Scheme打开第三方应用后,会将当前标签页切为后台状态,同时默认重置当前页面上下文,未执行完成的Ajax请求、异步逻辑都会被直接挂起/终止。你提到的「提前退出Chrome反而流程正常」,是因为主动切走应用时Chrome还未触发默认的页面重置逻辑,后台JS可以继续保持运行。
小提示:你当前示例中的
window.open ("example: // yyyy");包含多余空格,实际生产环境要修正为window.open("example://yyyy");避免部分浏览器识别异常;你配置的intent-filter逻辑正常,无需修改。
修复方案
- 方案1:调整代码执行顺序,优先发请求再唤起应用
将所有需要执行的Ajax请求逻辑放到window.open之前执行,确认请求已经成功发送到服务端后,再触发应用唤起逻辑,避免请求被Chrome中止。
async function submitForm(formData) { // 1. 先发起所有需要的ajax请求、初始化轮询逻辑 await fetch('/your-submit-api', { method: 'POST', body: formData }) // 2. 请求发送完成后再唤起应用 window.open('example://yyyy') }
- 方案2:用隐藏iframe唤起应用,替代window.open
window.open会触发标签页上下文切换,而通过隐藏iframe加载自定义URI Scheme不会修改当前页面状态,JS可以正常执行:
const iframe = document.createElement('iframe') iframe.style.display = 'none' iframe.src = 'example://yyyy' document.body.appendChild(iframe) // 唤起完成后移除iframe setTimeout(() => iframe.remove(), 1000)
- 方案3:阻止表单默认提交行为
如果使用原生表单提交逻辑,未阻止默认事件会触发页面自动刷新,和唤起应用的行为叠加会加快页面重置。给表单提交事件添加阻止默认逻辑:
document.querySelector('#your-form').addEventListener('submit', (e) => { // 阻止原生表单提交的页面跳转 e.preventDefault() // 执行自定义的请求、唤起应用逻辑 })
- 方案4:使用应用回调跳转替代页面等待
如果需要等待应用内流程完成后获取结果,可以让应用处理完逻辑后再通过自定义URI Scheme跳转回Chrome的指定结果页,传递处理状态,不需要在原页面持续挂起等待。
内容的提问来源于stack exchange,提问作者user1644419
相关产品推荐
相关产品推荐

