2011-01-15 4 views
7

내 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이라는 콜백을 추가하려면 위의 보안 메소드에 와일드 카드가 필요합니다.

+0

crossdomain.xml에 문제가되지해야합니다

더 많은 정보에서 찾아보세요. 귀하의 HTML도 서버에 또는 HTML 로컬 및 swf 원격로드 무엇입니까? – greggreg

+0

로컬에서는 html과 플래시가 모두 local.mydomain.com:8080에서옵니다. 원격으로 HTML은 www.mydomain.com에서 가져오고 flash는 flash.mydomain.com에서 가져옵니다. 플래시 위치를 로컬로 flash.mydomain.com으로 변경하면 같은 문제가 발생하며 콜백은 더 이상 작동하지 않습니다. –

+0

Flex 응용 프로그램을 포함하는 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", 인수); 플렉스 애플 리케이션이 자바 스크립트 코드를 호출 할 수 있도록 잘 작동합니다. ExternalInterface.callback은 그렇지 않습니다. –

+0

자, try/catch를 사용하여 addCallback 코드를 처리하고 발생한 SecurotyError가 있는지 확인하십시오. –

+0

나는 지금 막 모든 링크를 읽고 모든 것을 시도했다. allowScripting = "all", Security.allowDomain ("*"), Security.allowInsecureDomain ("*") (좋은 측정을 위해). 아무 것도 작동하지 않습니다. ( –

관련 문제