(在 iPhone
上的 Chrome
中工作正常)
我收到此错误:
TypeError: 'undefined' is not an object (evaluating 'win.location') in dg.js line 3
灯箱打不开。
PayPal dg.js 内的相关代码是:
startFlow: function (url) {
var win = that._render();
if (win.location) {
win.location = url;
} else {
win.src = url;
}
}
那么移动 Safari
无法理解 that._render()
吗?我该如何解决这个问题?
如果重要的话,我正在使用自适应付款
,这样调用它:
var dg = new PAYPAL.apps.DGFlow({
trigger: null,
expType: 'light'
});
dg.startFlow('https://www.paypal.com/webapps/adaptivepayment/flow/pay?expType=light&payKey=' +data.paykey);
我在获取 payKey
时没有遇到任何问题,并且整个 payflow
可以在桌面和除 Safari
之外的移动浏览器上运行(它适用于桌面版 Safari
)。当我们的网站作为 iOS
Web 应用程序运行时,它也不起作用,我认为它只是 Safari
的外壳。
最佳答案
我可以解释您为什么会看到此错误。 iOS 上的 Safari 只允许通过用户单击/触摸事件打开窗口。
DGFlow._render() 函数执行:
window.open('', "PPDG");
如果由用户点击/触摸事件以外的任何事件触发,则返回 null。
我猜测您正在发出 XMLHttpRequest 以在服务器上生成 PayRequest/PayKey,然后在 onsuccess 回调中调用 DGFlow.startFlow()。
解决方案是将过程分为两个步骤:
- 当用户准备结帐时,向服务器发出调用 生成支付 key 。
- 然后,向用户提供一个通过 PayPal 结账的按钮,单击该按钮后,调用 DGFlow.startFlow()
关于javascript - PayPal 灯箱无法在 iPhone safari/网络应用程序中打开; 'win.location' 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216172/