iOS 下多次调用支付宝一直支付第一笔订单的问题
iOS 下多次调用支付宝一直支付第一笔订单的问题
问题:
在 iOS Safari 环境下,在订单支付的时候选择支付宝,再取消支付,然后再去用支付宝支付别的订单,发现支付的是第一笔订单。原有代码的核心逻辑:
const div = document.createElement('divform'); div.innerHTML = res.data.data; document.body.appendChild(div); document.forms[0].submit();
后端返回的是一个 form 表单,通过提交该表单跳转到支付宝进行唤醒支付。
在 Android 环境下正常,在 iOS 平台实测,提交表单跳转到支付宝选择返回后,会复用原来的页面,而不是重新加载,这时候再次调用支付宝支付就会重走上面的逻辑。
此时
document.forms
获取表单会获取到n
个, 不过索引一直取的是 0,提交的表单还是原本订单的表单。修复后的代码:
const div = document.createElement('divform'); div.innerHTML = res.data.data; document.body.appendChild(div); let lastFormIndex = document.forms.length - 1; document.forms[lastFormIndex].submit();
这样修复后的一个小问题是在用
vConsole
进行调试的时候会发生冲突,因为vConsole
在页面的最底部插入的元素有两个 form 表单。这样获取到的最后一个 form 表单其实是vConsole
的表单。现有的业务逻辑没有 form 表单,可以这么处理,简单好使。
不然只能精细处理了,核心思想都一样:获取到最后一个插入的那个表单,提交它。