javascript - PayPal 灯箱无法在 iPhone safari/网络应用程序中打开; 'win.location' 未定义

标签 javascript paypal lightbox paypal-adaptive-payments

(在 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()。

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

  1. 当用户准备结帐时,向服务器发出调用 生成支付 key 。
  2. 然后,向用户提供一个通过 PayPal 结账的按钮,单击该按钮后,调用 DGFlow.startFlow()

关于javascript - PayPal 灯箱无法在 iPhone safari/网络应用程序中打开; 'win.location' 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216172/

相关文章:

javascript - 在 Bootstrap 日期时间选择器中更改 meridiem (am pm) 的文本

javascript - 单击时按钮不会消失(JavaScript)

paypal - 如何将 PayPal 按钮添加到客户的网站

php - 如何在灯箱画廊中将图像下方的文本居中?

twitter - 在灯箱上显示 Facebook 和 Twitter 共享页面

javascript - 有人可以告诉我为什么这个 js 函数不能在加载时运行吗?

javascript - 如果提交,确认电子邮件不会删除验证消息,但表单的其他元素需要填写

paypal - PayPal 的 GetVerifiedStatus `belong' 是否到 api 调用者的国家?

PHP Paypal,没有账户?

javascript - 幻灯片在 IE10 中不工作