私の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
でコールバックを追加するには、上記のセキュリティメソッドにワイルドカードを使用する必要があります。
のcrossdomain.xmlは問題ないはず:
詳細情報については、をご覧ください。あなたのhtmlもサーバ上にあるか、またはhtmlローカルでswfをリモートからロードしていますか? – greggreg
ローカルでは、htmlとflashの両方がlocal.mydomain.com:8080に由来します。遠隔では、htmlはwww.mydomain.comから来ており、flashはflash.mydomain.comから来ています。 flash.mydomain.comにフラッシュの場所をローカルに変更すると、同じ問題が発生し、コールバックが機能しなくなります。 –
あなたのFlexアプリケーションを埋め込んでいるsurrogding HTMLのallowScriptAccessパラメータの値はいくらですか? –