PayPal 灯箱无法在 iPhone Safari/Web 应用程序中打开; 'win.location' 未定义
Posted
技术标签:
【中文标题】PayPal 灯箱无法在 iPhone Safari/Web 应用程序中打开; \'win.location\' 未定义【英文标题】:PayPal lightbox won't open in iPhone safari/web app; 'win.location' undefinedPayPal 灯箱无法在 iPhone Safari/Web 应用程序中打开; 'win.location' 未定义 【发布时间】:2013-06-17 11:01:25 【问题描述】:(在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
web 应用程序运行时,它也不起作用,我认为它只是Safari
的外壳。
【问题讨论】:
【参考方案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]);
【讨论】:
我在灯箱上没有任何运气(我试过很棒)。我最终不得不为 iOS 集成迷你流程,尽管它可以使用新的浏览器窗口。 @Alex 我也面临着类似的问题。我的应用是一个IOS应用。我所做的是创建支付密钥并使用迷你浏览器 URL 加载 UIWebView。但我无法检测到用户何时完成付款或取消。不调用返回和取消url?你是如何在 IOS 中实现 mini flow 的。请帮帮我。 我实际上正在从我的系统中删除这个集成。根据我从 PayPal 支持中获得的信息,WebView 中不支持此流程,并且 PayPal 不会修复它,因为它们已经有效地停止了 Classic API 的开发。有一种解决方法可以删除 javascript 并直接重定向到 PayPal,将 payKey 作为查询参数传递,但用户体验很糟糕(至少没有针对移动设备进行优化)。【参考方案2】:尝试使用 expType=mini 的迷你浏览器体验。似乎比移动设备上的灯箱效果更好。
Adaptive Payments without modal box or popups?
【讨论】:
我们也尝试过 mini,但它仍然在 iOS/iOS Web 应用程序上的 Safari 中抛出相同的错误 =/【参考方案3】:我可以解释您看到此错误的原因。 iOS 上的 Safari 仅允许通过用户点击/触摸事件打开窗口。
DGFlow._render() 函数执行:
window.open('', "PPDG");
如果不是由用户点击/触摸事件触发,则返回 null。
我猜您正在发出 XMLHttpRequest 以在服务器上生成 PayRequest/PayKey,然后在 onsuccess 回调中调用 DGFlow.startFlow()。
解决方法是把过程分成两个步骤:
-
当用户准备结帐时,向服务器发出调用以
生成支付密钥。
然后,向用户显示一个使用 PayPal 结帐的按钮,当单击该按钮时,调用 DGFlow.startFlow()
【讨论】:
以上是关于PayPal 灯箱无法在 iPhone Safari/Web 应用程序中打开; 'win.location' 未定义的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript 智能按钮灯箱的 PayPal 访客订阅未关闭