2

(在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整个作品没有任何问题。当我们的网站作为 Web 应用程序运行时,它也不起作用,我认为它只是一个外壳。payflowSafariSafariiOSSafari

4

3 回答 3

2

我可以解释为什么您会看到此错误。iOS 上的 Safari 仅允许由于用户单击/触摸事件而打开窗口。

DGFlow._render() 函数执行:

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

如果不是由用户点击/触摸事件触发,则返回 null。

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

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

  1. 当用户准备结账时,向服务器发出调用以生成支付密钥。
  2. 然后,向用户显示一个使用 PayPal 结帐的按钮,当单击该按钮时,调用 DGFlow.startFlow()
于 2013-12-20T05:18:13.123 回答
1

找到了几种方法来解决这个问题……location.replace使用 PayPal URL 或使用您自己的灯箱。我用过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}]);
} 
于 2013-06-25T05:18:36.787 回答
1

尝试使用 expType=mini 的迷你浏览器体验。似乎比移动设备上的灯箱效果更好。

没有模式框或弹出窗口的自适应支付?

于 2013-07-18T17:07:18.987 回答