문제

Flex SWF가 호스팅되어 있습니다. http://www.a.com/a.swf.SWF 로드를 시도하는 다른 도메인에 플래시 코드가 있습니다.

_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);

onLoaderFinish 이벤트에서 원격 SWF에서 클래스를 로드하고 생성하려고 합니다.

_loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class

이 코드가 실행되면 다음 예외가 발생합니다.

SecurityError: Error #2119: Security sandbox violation: caller http://localhost.service:1234/flashTest/Main.swf cannot access LoaderInfo.applicationDomain owned by http://www.b.com/b.swf.
    at flash.display::LoaderInfo/get applicationDomain()
    at NuconomyLoader/onLoaderFinish()

이 코드를 작동시킬 수 있는 방법이 있나요?

도움이 되었습니까?

해결책

이것은 모두 설명되어 있습니다. Adobe Flex 3 프로그래밍 ActionScript 3 PDF 550페이지(27장:Flash Player 보안/크로스 스크립팅):

ActionScript 3.0으로 작성된 두 개의 SWF 파일이 서로 다른 도메인에서 제공되는 경우(예: http://siteA.com/swfA.swf 그리고 http://siteB.com/swfB.swf—그러면 기본적으로 Flash Player에서는 swfA.swf가 swfB.swf를 스크립팅하거나 swfB.swf가 swfA.swf를 스크립팅하는 것을 허용하지 않습니다.SWF 파일은 Security.allowDomain()을 호출하여 다른 도메인의 SWF 파일에 권한을 부여합니다.swfB.swf는 Security.allowDomain("siteA.com")을 호출하여 siteA.com의 SWF 파일에 스크립트 권한을 부여합니다.

다이어그램 등을 포함하여 좀 더 자세히 설명합니다.

다른 팁

로드한 파일이 있는 서버에 crossdomain.xml 정책 파일이 필요하며 다음과 같아야 합니다.

<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
  <allow-access-from domain="www.friendOfFoo.com" />
  <allow-access-from domain="*.foo.com" />
  <allow-access-from domain="105.216.0.40" />
</cross-domain-policy>

로드 중인 도메인의 루트에 crossdomain.xml로 입력하세요.

또한 이 파일을 읽으려면 로더를 다음과 같이 설정해야 합니다.

var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete );
loader.load( new URLRequest( "http://my.domain.com/image.png" ), loaderContext );

다음에서 가져온 코드 샘플 http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/

어쩌면 System.Security.allowDomain 당신이 필요로하는 것입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top