Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 苹果支付界面在移动Safari上重定向后冻结页面_Javascript_Browser_Stripe Payments_Mobile Safari_Applepay - Fatal编程技术网

Javascript 苹果支付界面在移动Safari上重定向后冻结页面

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

我们正在使用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.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)

对不起,我这里没有更好的答案