(Chrome
上的iPhone
我收到此错误:
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
网络应用运行时,它也不起作用,我认为它只是Safari
的一个shell。
答案 0 :(得分:2)
我可以解释为什么你会看到这个错误。 iOS上的Safari仅允许在用户点击/触摸事件时打开窗口。
DGFlow._render()函数执行:
window.open('', "PPDG");
如果由用户点击/触摸事件以外的任何内容触发,则返回null。
我猜您正在发出XMLHttpRequest以在服务器上生成PayRequest / PayKey,然后在onsuccess回调中调用DGFlow.startFlow()。
解决方案是将流程分为两个步骤:
答案 1 :(得分:1)
使用PayPal网址或使用您自己的灯箱,找到了几种方法来解决这个问题...... 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}]);
}
答案 2 :(得分:1)
尝试使用expType = mini的迷你浏览器体验。似乎比移动设备上的灯箱效果更好。