Javascript 苹果支付界面在移动Safari上重定向后冻结页面
我们正在使用Stripe在Safari中实现Apple Pay。一切都按照计划进行,直到stripe在我们呼叫时发出Javascript 苹果支付界面在移动Safari上重定向后冻结页面,javascript,browser,stripe-payments,mobile-safari,applepay,Javascript,Browser,Stripe Payments,Mobile Safari,Applepay,我们正在使用Stripe在Safari中实现Apple Pay。一切都按照计划进行,直到stripe在我们呼叫时发出token事件,关闭Safari Apple Pay界面 paymentRequest.on('token', async (ev) => { if (ev) { ev.complete('success'); let address = await somePromise(), fullname = (ev.p
token
事件,关闭Safari Apple Pay界面
paymentRequest.on('token', async (ev) => {
if (ev) {
ev.complete('success');
let address = await somePromise(),
fullname = (ev.payerName || '').split(' '),
customerInfo = ...
...
let params = {...address, ..customerInfo, ...};
window.location.href = this.resolveRedirectUrl(params); // If we wrap this in setTimeout 1000ms+, issue gets fixes...
return;
}
window.location.href = this.resolveRedirectUrl()
});
它在12.1.x iOS Safari上运行正常,但在12.3.x上失败。Safari支付界面不会自动离开屏幕(不会被解除),当手动解除时,会冻结我们重定向到的整个页面。只有在重新打开Safari后,页面才能正常运行
但是如果window.location.href=this.resolveRedirectUrl(params)代码>被包装在setTimeout
中,大约在一秒钟以上,问题得到修复。就像Apple Pay界面,如果在完全关闭之前更改了路由,它就不会正确关闭UI元素
接口完全关闭时是否会触发任何事件?我浏览了官方文件,但没有结果
setTimeout
只是感觉不舒服、不理想,这种方法可能会根据手机性能等而有所不同
所以,请停下来!:) 这听起来更像是Safari、异步代码和设置window.location.href
之间的问题,而不是Stripe或Apple Pay的问题setTimeout
看起来确实有点骇人听闻,但WebKit内部有一些限制,阻止在打开Apple Pay sheet时设置window.location.href
。更糟糕的是,在测试中,在重定向之前,您似乎需要给3-5秒的时间让一切在Safari中“解决”。不过,类似的方法应该可以奏效:
setTimeout(()=>window.location.href=…,3000)
抱歉,我这里没有更好的答案。这听起来更像是Safari、异步代码和设置window.location.href之间的问题,而不是Stripe或Apple Pay的问题setTimeout
看起来确实有点骇人听闻,但WebKit内部有一些限制,阻止在打开Apple Pay sheet时设置window.location.href
。更糟糕的是,在测试中,在重定向之前,您似乎需要给3-5秒的时间让一切在Safari中“解决”。不过,类似的方法应该可以奏效:
setTimeout(()=>window.location.href=…,3000)
对不起,我这里没有更好的答案