1

Phonegap アプリケーションからbalanced.card.create を呼び出すことはできません。これは、 https ://github.com/kevg/phonegap-balanced のストック Phonegap アプリケーションで再現されています。詳細は github の README.md にありますが、基本的な概要は次のとおりです。

phonegap に慣れていない方のために説明すると、読み込まれるメイン ページは index.html です。これにより、index.js で phonegap が初期化されます。デバイスの準備が整うと、「Execute Balanced」という名前のボタンを含む非表示の DIV が表示されます。このボタンをクリックすると、index.js の app.executeBalanced が呼び出され、バランスの取れたマーケットプレイス URI の入力を求めるプロンプトが表示され、balanced.js が $.getScript で読み込まれ、テスト クレジット カードでbalanced.card.create が呼び出されます。

期待される結果は、callbackHandler が呼び出されるか、例外がキャッチされることです。代わりに、Javascript スレッドの実行は、balanced.card.create に消え、エラーが発生することはありません。

スクリーンショットの例

4

1 に答える 1

1

よし、balanced.js にバグが見つかった。したがって、Phonegap では、window.location.href は file:///.../index.html のようなものを返します。Balanced.js は、https: //js.balancedpayments.com/proxy#file のようなものに iframe を作成します

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

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

proxy.html で返されるスクリプト (github で見つけることができません) では、次のようになります。

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

file: に 3 つのスラッシュがあるため、正規表現は一致しません。さて、最初は、正規表現を次のように変換できると思いました。

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

ただし、balanced は一致時にセキュリティ オリジン チェックを行うため、別の問題があります。

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

ただし、正規表現は file:///firstcomponent を返しますが、event.originにはファイル スキームのホスト名が含まれていないため、これらは固定の正規表現でも一致しません。

プロキシ応答で返されたスクリプトを変更することはできません。これは、balancedpayments.com 以外のドメインからスクリプトをロードすると、AJAX POST が失敗するためです (本文が空白でコード 0 が返されます)。したがって、私が制御できるのは、iframe に渡されるハッシュだけです。

ただし、この正規表現は置換であるため、必要なことがわかっているものをそのまま渡すことができます (正規表現がノーオペレーションであることは気にしません)。

したがって、解決策は上記の L48 を次のように変更することです。

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

これは機能します。

于 2014-02-12T22:22:38.873 に答える