安卓Chrome点击通用UPI intent链接时显示'Navigation is blocked'问题
安卓Chrome 110中通用UPI Intent跳转被阻止的解决方案分析
问题概述
在部分安卓设备的Chrome稳定版110中,点击包含upi://...的锚点标签时,Chrome会阻止导航并在控制台打印**"Navigation is blocked"**错误,无法正常唤起UPI应用选择托盘或打开默认UPI应用。已知特征:
- 仅通用UPI Intent出现此问题,应用特定Intent可正常工作
- 问题是近期Chrome更新后出现的,此前无此现象
market://等其他类型Intent不受影响- 相同Chrome版本的部分设备可正常触发通用UPI Intent
非官方文档提及的拦截场景
Chrome官方文档仅列出两种拦截情况,但结合问题特征,可能的额外触发场景包括:
- 通用Intent参数不完整:Chrome 110可能新增了对UPI Intent核心参数的校验,若缺失
pa(收款方UPI ID)、am(金额)等必要参数,会被判定为无效Intent而拦截。 - 设备无匹配UPI应用:若设备未安装任何支持通用UPI Intent的应用,Chrome无法找到处理该Intent的目标,直接拦截跳转(而非提示无可用应用)。
- Chrome安全策略更新:针对通用Scheme的跳转增加了更严格的安全校验,比如对Intent格式的规范性、参数合法性做了额外检查,不符合要求的会被拦截。
- 自定义ROM的Intent限制:部分安卓设备的自定义系统(如MIUI、ColorOS等)对通用Scheme Intent做了系统层面的限制,导致Chrome无法正常唤起应用选择流程。
可行的解决尝试方案
针对上述可能的原因,可尝试以下未提及的解决方案:
补充完整UPI Intent参数
严格按照UPI规范构造Intent,确保包含所有核心参数,示例:<a href="upi://pay?pa=merchant@upi&pn=Merchant Name&am=100&cu=INR&tn=Payment for Order #123">Pay with any UPI app</a>缺失核心参数是Chrome拦截的常见诱因之一。
添加带Fallback的原生Intent格式
在原生安卓Intent格式中补充S.browser_fallback_url参数,指定网页端的 fallback 地址,避免Chrome因无 fallback 选项而拦截:<a href="intent://pay?pa=merchant@upi&pn=Merchant Name&am=100&cu=INR#Intent;scheme=upi;S.browser_fallback_url=https://your-site.com/payment-fallback;end;">Pay with any UPI app</a>绑定明确的用户交互事件
通过JavaScript绑定点击事件,确保Intent触发是直接的用户操作,避免Chrome误判为程序化跳转:document.getElementById('upi-pay-link').addEventListener('click', function(e) { e.preventDefault(); window.location.href = 'upi://pay?pa=merchant@upi&pn=Merchant Name&am=100&cu=INR'; });引导用户检查设备配置
- 确认设备已安装至少一款支持UPI的应用,并设置了默认UPI应用(部分设备未设置默认时,Chrome可能无法处理通用Intent)。
- 清除Chrome的缓存和站点数据,避免旧的Intent规则缓存导致异常。
- 检查Chrome的
设置 > 隐私和安全 > 网站设置 > 弹出式窗口和重定向,确保允许当前网站的重定向操作。
提供网页支付 fallback
若上述方案均无效,可在页面中提供网页支付选项,当UPI Intent触发失败时引导用户切换至网页支付,保证支付流程的可用性。
内容的提问来源于stack exchange,提问作者Sreejit De
相关产品推荐
相关产品推荐

