PayPal灯箱无法在iPhone Safari / web app中打开; 'win.location'未定义

时间:2013-06-20 14:22:15

标签: javascript paypal lightbox paypal-adaptive-payments

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。

3 个答案:

答案 0 :(得分:2)

我可以解释为什么你会看到这个错误。 iOS上的Safari仅允许在用户点击/触摸事件时打开窗口。

DGFlow._render()函数执行:

window.open('', "PPDG");

如果由用户点击/触摸事件以外的任何内容触发,则返回null。

我猜您正在发出XMLHttpRequest以在服务器上生成PayRequest / PayKey,然后在onsuccess回调中调用DGFlow.startFlow()。

解决方案是将流程分为两个步骤:

  1. 当用户准备结帐时,向服务器发出呼叫 生成付款密钥。
  2. 然后,向用户显示一个使用PayPal结账的按钮,点击该按钮后,调用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的迷你浏览器体验。似乎比移动设备上的灯箱效果更好。

Adaptive Payments without modal box or popups?