2014-02-12 66 views
1

我們無法從Phonegap應用程序調用balanced.card.create。這是在股票Phonegap應用程序中複製:https://github.com/kevg/phonegap-balanced。全部細節都在README.md GitHub上,但基本摘要:平衡付款似乎不適用於Phonegap

對於那些不熟悉的PhoneGap,加載主頁是 的index.html。這會在index.js中初始化phonegap。當準備好設備 時,我們將顯示一個隱藏的DIV,其中包含一個名爲「執行 平衡」的按鈕。當你點擊這個按鈕時,將調用index.js 中的app.executeBalanced,它提示均衡市場URI,用$ .getScript加載 balanced.js,然後用 調用balanced.card.create測試信用卡。

預期的結果是callbackHandler被調用或發現異常 被捕獲。相反,似乎執行的Javascript線程 會消失到balanced.card.create中,永不返回並且沒有任何 錯誤。

example screenshot

+0

我應該在[config.xml](https:// github)中添加所有外部請求[白名單](http://docs.phonegap.com/en/3.3.0/guide_appdev_whitelist_index.md.html)的.com/kevg/PhoneGap的平衡/斑點/主/ PhoneGap的平衡應用內/網絡/配置。xml#L52),這實際上是如何balanced.js能夠加載罰款,所以我不認爲這是這種類型的問題。另外,在我們真實的應用程序中,如果我們將phonegap瀏覽器重定向到我們的https://網站,然後調用balanced.card.create,那麼事情就會正常工作(但是,我們會離開file:///.../index.html和因此無法訪問手機API) – Infofinity

回答

1

Alrighty,我發現在balanced.js的bug。因此,在Phonegap中,window.location.href返回類似file:///.../index.html的內容。 Balanced.js創建像https://js.balancedpayments.com/proxy#file

var src = proxy + "#" + encodeURIComponent(window.location.href); 

https://github.com/balanced/balanced-js/blob/master/src/utils.js#L48

在proxy.html(我不能在github上找到)返回的腳本,它的iframe的東西:

c.parentURL=decodeURIComponent(
    window.location.hash.replace(/^#/,"") 
).replace(/#.*$/,"") 
c.parentDomain=c.parentURL.replace(/([^:]+:\/\/[^\/]+).*/,"$1") 

正則表達式不匹配,因爲文件:有三個斜槓。現在,起初,我以爲我可以在正則表達式只是轉換爲:

/([^:]+:\/+[^\/]+).*/ 

然而,然後還有另外一個問題,因爲平衡確實對比賽安全源檢查:

if (d.origin.toLowerCase() !== c.toLowerCase()) return !1; 

然而,正則表達式返回file:/// firstcomponent,而event.origin不包含文件方案的主機名,所以即使使用固定的正則表達式也不會匹配。

我無法更改代理響應中返回的腳本中的任何內容,因爲如果我從非balancedpayments.com的域加載該內容,則AJAX POST將失敗(返回代碼爲0的空白主體)。因此,我唯一可以控制的就是傳遞給iframe的散列。

但是,由於這個正則表達式是一個替換,我們可以簡單地傳遞我們知道我們需要的東西(我們並不在意這個正則表達式是否爲空操作)。

因此,該解決方案是改變L48以上:

var src = proxy + "#" + encodeURIComponent("file://"); 

這工作。

+0

嗨,@Infofinity - 感謝您的解釋。今天我會看到它。 –

+0

@MahmoudAbdelkader嗨馬哈茂德,謝謝! – Infofinity