내 Flex 애플리케이션에서 Javascript 컨트롤을 사용해야 Actionscript 메서드 중 하나를 호출 할 수 있습니다. 간단한만큼, 플렉스/액션 스크립트 설명서에 따라, 내 액션 스크립트 코드에 쓴 :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로 해결됩니다 (일부 위젯이 제대로 작동 할 수 있도록이 작업을 수행해야합니다). 그리고 Flex 응용 프로그램은 그러나 제작시에는 www.mydomain.com (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>
업데이트 : 로컬 환경을 변경하여 프로덕션 환경에서와 마찬가지로 flash.mydomain.com에서 Flex 응용 프로그램을 참조하려고했습니다. 내가 동일한 문제점을 로컬에서도 발생하는 것으로 밝혀졌습니다 ... 위의 crossdomain.xml 파일에도 불구하고 도메인 보안 문제가있는 것 같습니다. 내 crossdomain.xml에서 뭔가를 변경해야합니까? ExternalInterface.addCallback
을 작동시키기 위해 추가로 필요한 것이 있습니까?
업데이트 2 : 제대로 작동합니다. 나는 Security.allowDomain("*")
과 Security.allowInsecureDomain("*")
을 모두해야만했다. flash.mydomain.com으로 설정하면 문제가 해결되지 않았으므로 와일드 카드를 사용해야했습니다. allowNetworking
은 효과가 없습니다. 나는 allowScriptAccess="always"
가 필요하다. 그러나 나는 그것을 전에 가지고 있었다. ExternalInterface.call
으로 자바 스크립트를 호출하면 해당 매개 변수로 쉽게 작업 할 수 있습니다. 그러나 ExternalInterface.addCallback
이라는 콜백을 추가하려면 위의 보안 메소드에 와일드 카드가 필요합니다.
crossdomain.xml에 문제가되지해야합니다
더 많은 정보에서 찾아보세요. 귀하의 HTML도 서버에 또는 HTML 로컬 및 swf 원격로드 무엇입니까? – greggreg
로컬에서는 html과 플래시가 모두 local.mydomain.com:8080에서옵니다. 원격으로 HTML은 www.mydomain.com에서 가져오고 flash는 flash.mydomain.com에서 가져옵니다. 플래시 위치를 로컬로 flash.mydomain.com으로 변경하면 같은 문제가 발생하며 콜백은 더 이상 작동하지 않습니다. –
Flex 응용 프로그램을 포함하는 HTML에서 allowScriptAccess 매개 변수의 값은 무엇입니까? –