2011-01-15 10 views
7

私のFlexアプリケーションでは、私のActionscriptメソッドの1つを呼び出すためにJavascriptコントロールが必要です。十分なシンプルは、Flex/ActionScriptのドキュメントによると、私は私のActionScriptコードでこれを書いた:Javascriptの制御でActionscriptのExternalInterface.addCallbackは、プロダクションではなくローカルでのみ動作します

if (ExternalInterface.available) 
    ExternalInterface.addCallback("setName", setNameInActiveWindow); 

を私が書いた:

document.getElementById('FlexAppId').setName(name); 
を素晴らしい作品

。正確に期待どおりに、私は生産に行った。しかし、それは生産では動作しません:(同じコード...私はそれを把握することはできません上記のJavascriptコードが実行されますが、コールバックはActionscriptコードで実行されません。

ローカルではlocal.mydomain.com:8080を使用していますが、local.mydomain.comが127.0.0.1に解決されています(私はこれを行う必要がありますので、いくつかのウィジェットが適切に動作する必要があります)。 (mydomain.comは実際のドメイン名ではありません)、Flexアプリケーションはflash.mydomain.com(CDN)から来ます。

私は持っていますwww.mydomain.comのcrossdomain.xmlファイル:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
     <site-control permitted-cross-domain-policies="master-only"/> 
     <allow-access-from domain="*.mydomain.com"/> 
</cross-domain-policy> 

更新:プロダクション環境のように、Flexアプリケーションがflash.mydomain.comから参照されるようにローカル環境を変更しようとしました。私も同じ問題がローカルにあることが判明しました。これは、上記のcrossdomain.xmlファイルにもかかわらず、ドメインセキュリティの問題のようです。 crossdomain.xmlで何かを変更する必要がありますか? ExternalInterface.addCallbackを動作させるために何か追加が必要ですか?

更新日2:正常に機能しました!私はSecurity.allowDomain("*")Security.allowInsecureDomain("*")の両方をしなければならなかった。 flash.mydomain.comに設定すると問題は解決されませんでしたが、ワイルドカードを置く必要がありました。 allowNetworkingは効果がありませんでした。私はallowScriptAccess="always"が必要ですが、私は前からそれを持っていました。 ExternalInterface.callでJavascriptを呼び出すと、そのパラメータだけで簡単に動作します。しかし、ExternalInterface.addCallbackでコールバックを追加するには、上記のセキュリティメソッドにワイルドカードを使用する必要があります。

+0

のcrossdomain.xmlは問題ないはず:

詳細情報については、をご覧ください。あなたのhtmlもサーバ上にあるか、またはhtmlローカルでswfをリモートからロードしていますか? – greggreg

+0

ローカルでは、htmlとflashの両方がlocal.mydomain.com:8080に由来します。遠隔では、htmlはwww.mydomain.comから来ており、flashはflash.mydomain.comから来ています。 flash.mydomain.comにフラッシュの場所をローカルに変更すると、同じ問題が発生し、コールバックが機能しなくなります。 –

+0

あなたのFlexアプリケーションを埋め込んでいるsurrogding HTMLのallowScriptAccessパラメータの値はいくらですか? –

答えて

2

SWFとDOM間の通信は、クロスドメインファイルでは処理されません。 この種のFlashコンテンツとナビゲータ間のやりとりは、allowScriptAccessallowNetworkingというタグで、SWFをラップするタグによって処理されます。

あなたのSWFとHTMLが同じ修飾ドメインからではありませんので、あなたは常にのallowScriptAccess値を設定する必要があります。 しかし、SWFに信頼できないコンテンツを読み込むと、DOMページにアクセスし、悪意のあるものを実行する可能性もあるので注意してください。

http://tv.adobe.com/watch/how-to-develop-secure-flash-platform-apps/scripting-and-allowscriptaccess/ http://kb2.adobe.com/cps/407/kb407748.html http://blogs.adobe.com/stateofsecurity/2007/07/how_to_restrict_swf_content_fr_1.html

+0

私のallowscriptaccessの値は、常に "always"に設定されています。また、ExternalInterface.call( "javascriptMethod"、引数); Flexアプリケーションでjavascriptコードを呼び出すことができます。 ExternalInterface.callbackはそうではありません。 –

+0

Ok、addCallbackコードをtry/catchで調べ、スローされたSecurotyErrorがあるかどうか確認してください。 –

+0

私はこれらのリンクを今読んだことがあります。 allowScript = "all"、Security.allowDomain( "*")、Security.allowInsecureDomain( "*")(適切な対策のために)allowScriptAccess = "always" –

関連する問題