3

免責事項
まず、免責事項: 私は特定の境界内で作業しているため、長い道のりを歩んでいるように見えるかもしれませんが、できることは限られています。これをまったく別の方法で行う必要があることはわかっていますが、できません。ここでやろうとしていることを実行できない場合でも、それで問題ありません。知る必要があるだけです。


背景
基本的に、これはクロスドメインの JavaScript 呼び出しに要約されます。ただし、メソッドを返す前に応答を待つ必要があります。

example1.com/host.html というページがあるとします。これには、int を返す「ProvideValue()」の JavaScript メソッドが含まれています。 編集: このメソッドは、そのドメイン内の他のリソースにアクセスし、現在のセッションに設定されたグローバル変数にアクセスする必要がある場合があるため、見つかった場所で実行する必要があります。

https://example1.com/host.html

function ProvideValue(){
 return 8;  // In reality, this will be a process that returns a value
}

この host.html ページには、example2.com/content.html を指す iframe が含まれています (別のドメインに注意してください)。この content.html ページには、アラートで host.html からの値を表示する必要があるメソッドが含まれています。

https://example2.com/content.html

function DisplayValue(){
 var hostValue = //[get value from ProvideValue() in host.html]
 alert(hostValue);
}

それでおしまい。

制限
host.html で好きな JavaScript を実行できますが、サーバー側では何も実行できません。content.html では、javascript とサーバー側のものを実行できます。example1.com ドメインは制御できませんが、example2.com は完全に制御できます。

質問
example2.com/content.html の DisplayValue() メソッド内で、example1.com/host.html の ProvideValue() から値を取得するにはどうすればよいですか?


以前の試み
今、私は多くのクロスドメイン手法を試しましたが、(私が見つけた) それらのすべてが非同期コールバックを使用しています。この場合、それは機能しません。なぜなら、host.html にリクエストを送信し、値を受け取る必要があり、そのすべてが content.html の 1 つのメソッドのスコープ内にあるからです。

私が取り組んだ唯一の解決策は、非同期のクロスドメイン スクリプティング (easyXDM を使用) と、example2.com のサーバー側の要求/応答のリストに依存することでした。DisplayValue() メソッドは、host.html への要求を行い、すぐにサーバーへの同期ポストを行いました。サーバーは、クロスドメイン コールバックからの応答が通知されるまで待機します。待っている間、コールバックはサーバーに別の呼び出しを行い、応答を保存します。FireFox と IE では問題なく動作しましたが、Chrome は DisplayValue() が完了するまでコールバックを実行しませんでした。私の最初の質問に対処する方法がなく、このオプションが有望である場合、これを新しい質問として提起しますが、この質問を複数のトピックで混乱させたくありません.

4

1 に答える 1