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://");
這工作。
我應該在[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