2013-06-20 55 views
2

'win.location'(在Chrome正常工作的iPhonePayPal燈箱不會在iPhone safari/web應用程序中打開;未定義

我得到這個錯誤:

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); 

我沒有任何問題,讓臺式機和除Safari其他移動瀏覽器的payKey &整個payflow作品(它在桌面上工作Safari)。當我們的網站作爲iOS網絡應用運行時,它也不起作用,我認爲它只是Safari的殼。

回答

1

發現一對夫婦的方式來解決這個問題... location.replace貝寶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}]); 
} 
+1

我沒有與任何燈箱運氣(我試過莊重)。我最終不得不集成適用於iOS的迷你流程,該流程雖然具有新的瀏覽器窗口,但仍能正常工作。 – Alex

+0

@Alex我也面臨類似的問題。我的應用是一個IOS應用。我所做的是創建paykey並使用迷你瀏覽器URL加載UIWebView。但是我無法檢測到用戶完成付款或取消付款。返回並取消網址不被稱爲?你是如何在IOS中實現迷你流的?請幫幫我。 – arundevma

+0

我實際上正在將這種整合從我的系統中剝離出來。根據我從PayPal支持獲得的信息,此流程在WebView內部不受支持,而PayPal無法解決此問題,因爲它們已經有效地停止了Classic API上的開發。有一種解決方法可以刪除JavaScript,只是直接重定向到PayPal,將payKey作爲查詢參數傳遞,但用戶體驗很糟糕(至少不是移動優化)。 – Alex

1

嘗試使用expType = mini的迷你瀏覽器體驗。似乎比移動設備上的燈箱效果更好。

Adaptive Payments without modal box or popups?

+1

我們也嘗試過mini,它仍然在iOS/iOS web應用上的Safari中拋出相同的錯誤,儘管= / –

2

我可以解釋爲什麼您看到了這個錯誤。 iOS上的Safari僅允許通過用戶單擊/觸摸事件打開窗口。

的DGFlow._render()函數執行:

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

如果不是用戶點擊/觸摸事件的任何其他觸發該返回null。

我猜你正在發佈XMLHttpRequest來在服務器上生成PayRequest/PayKey,然後在onsuccess回調中調用DGFlow.startFlow()。

解決的辦法是一分爲二的過程分爲兩個步驟:

  1. 當用戶準備結帳,發出呼叫服務器 生成付款密鑰。
  2. 然後,向用戶呈現一個按鈕,貝寶收銀臺和被點擊時,調用DGFlow.startFlow()