记录在苹果X手机上运行遇到的代码Dom被阻塞不更新的一个坑
一、问题产生背景:
开发支付功能,代码逻辑如下:点击支付后,请求后台接口得到流水号以及第三方支付台链接,跳转支付台(在苹果手机则是弹出支付台层);支付完毕后返回支付页面,或中途退出支付台返回支付页面;弹出查单框,让用户选择触发查单;查单结果未支付,则直接关闭查单框,或关闭查单框后再弹层提示支付失败。
如图:
在pc、安卓各种环境以及除了苹果X之外的苹果手机各种环境(手机自带浏览器,公司开发的app等)运行,都很顺畅,而在测试机苹果X,版本13.1.2,自带浏览器运行正常,到了公司的app内运行,却遇到阻塞,自测js代码已经执行,页面dom却被阻塞了一样卡住:
1、先看苹果X自带浏览器运行效果:
2、在自家app环境内,点击支付按钮,怎么点击页面无反应,直到点击下了vConsole按钮,页面dom刷新,支付台才突然出现(ps:控制台报错部分各端皆有,且不影响支付页面)
3、在自家app环境内,从支付台回到支付页,查单弹框点击后,自测js已执行完毕,页面却卡住了,同样点击下了vConsole按钮,页面dom刷新,页面才显示出最终结果(ps:控制台报错部分各端皆有,且不影响支付页面)
3、尝试验证猜想,每一步js执行操作都加上弱提示,结果,一路顺畅
二、解决思路:
在每步执行后面往页面添加一个看不见的dom节点,触发页面dom不被阻塞,至于为何在这个苹果x的app环境内遇到此情况,百思不得其解。记录一下,防奇葩。
三、后续:
虽然解决了当前页面不被阻塞的情况,但是去到其他页面也存在类似的情况,继续跟踪后发现是请求方法请求成功后的回调内容不执行,触碰下页面才会执行完毕,而且此类情况是出现在苹果x的最新系统,本公司自开发app,灰度环境,于是计划直接接app原生支付方法,后来又因为正式上线后并没有复现到该问题,于是总结是app、环境、系统等综合影响的结果吧,线上无问题就皆大欢喜了。