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 を返します。

サーバー上で PayRequest/PayKey を生成するために XMLHttpRequest を発行し、onsuccess コールバックで DGFlow.startFlow() を呼び出していると思います。

解決策は、プロセスを 2 つのステップに分割することです。

  1. ユーザーがチェックアウトする準備ができたら、サーバーに呼び出しを発行して支払いキーを生成します。
  2. 次に、PayPal でチェックアウトするためのボタンをユーザーに提示し、それがクリックされたら、DGFlow.startFlow() を呼び出します。
于 2013-12-20T05:18:13.123 に答える
1

これを回避する方法がいくつか見つかりました... location.replacePayPal URL を使用するか、独自のライトボックスを使用します。イージーボックスを使用しました。

// 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 に答える