JavaScriptとFlashの間でクロスドメイン通信を行う方法
-
19-08-2019 - |
質問
「クロスドメインセキュリティ」を開くと、ページのJavaScriptが別のドメインでホストされている場合でも、SWFと自由に通信できますか
この関数の通信はデフォルトでブロックされていることは確かですが、<!> quot; crossdomain.xml <!> quot;というファイルをいじってみてください。およびactionscript 3関数:system.Security.allowDomain(<!> quot; * <!> quot;)。しかし、私は完全に成功しているわけではありません。また、誰が何のために開いているのかを知る洞察もありません。
このシナリオで考慮する必要がある他の隠されたセキュリティ層はありますか?
そして、このセットアップを行うことで、潜在的にハッカー向けにコードを公開していますか?
(そして、あなたが疑問に思っている場合:はい、私は、HTMLが1つのドメインでホストされるシナリオでこの作業を行う持っている、別のドメインから外部にJavaScriptが追加され、 SWFは、3番目のドメインのJavaScriptによって埋め込まれています-理由を聞かないで、説明するのが複雑すぎます-全部を1つのドメインでホストできるといいのですが。)
解決
SWFでSecurity.allowDomain("www.example.com")
を使用すると、www.example.comのページのJSがExternalInterface.addCallback()
を使用してSWFで公開されている関数を呼び出すことができます。ドメインとサブドメインは正確に一致する必要があります。 "*"
を使用すると、すべてのドメインがSWFと通信できますが、特定のドメインが1つある場合は、それを使用することをお勧めします。
HTML埋め込みコードでallowScriptAccess
をalways
に設定すると、SWFがJavaScript関数を呼び出すことができます。
多くの開発者を捕らえることの1つは、SWFの読み込みが完了するまでJavaScriptがSWFの関数を呼び出せないことです。残念ながら、SWFの準備ができたときに通知するJSベースのイベントはありません(少なくとも私が発見したこと)。この問題を回避するために通常行うことは、SWFの読み込みが完了したらすぐにSWFからJS関数を呼び出して、SWFの準備ができたことをページに通知することです。
あちこちにいくつかの抽象化がありますが、 YUIチャートのソースコードを見ると、Yahoo!クロスドメインJS / SWF通信が機能するようになりました。
他のヒント
前の回答に追加したいこと:上記のコードを試しても動作しない場合は、サイトのアドレスに<!> quot; www <!> quot;が含まれているかどうかを確認してください。か否か。私はそれを
として書いた場合、私のものは機能せず、機能しませんでしたSecurity.allowDomain("www.jeremy-knight.com");
次のように書く必要がありました:
Security.allowDomain("jeremy-knight.com");