[英]PayPal lightbox won't open in iPhone safari/web app; 'win.location' undefined
(在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()
? 我该如何解决?
如果很重要,我将使用Adaptive Payments
,其调用方式如下:
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,然后在成功回调中调用DGFlow.startFlow()。
解决方案是将过程分为两个步骤,分为两个步骤:
找到了几种解决此问题的方法。用PayPal URL或使用您自己的灯箱替换location.replace
。 我用了easybox 。
// Replace
dg.startFlow('https://www.paypal.com/webapps/adaptivepayment/flow/pay?expType=light&payKey=' +data.paykey);
// with
var RUNNING_AS_WEB_APP = (window.navigator.standalone == true ? true : false);
if (RUNNING_AS_WEB_APP === false) {
dg.startFlow('https://www.paypal.com/webapps/adaptivepayment/flow/pay?expType=light&payKey=' +data.paykey);
} else {
location.replace('https://www.paypal.com/webapps/adaptivepayment/flow/pay?expType=light&payKey=' +data.paykey);
// Or, lightbox option:
// $.easybox([{url: 'https://www.paypal.com/webapps/adaptivepayment/flow/pay?expType=light&payKey=' +data.paykey, width: 320, height: 480}]);
}
尝试使用expType = mini的迷你浏览器体验。 似乎比移动设备上的灯箱更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.