2011-04-08 3 views
5

Hii, swf 파일을 다른 서버의 Flash 응용 프로그램에로드하려고합니다. 내가 플래시 IDE에로드하려고 CRL (+ 입력) 모든 것이 잘 작동하지만, 내가 독립적 인 SWF 파일과 SWF를 실행하거나 할 때 디버깅, 나는이 오류 받고 있어요 :Flash AS3 외부 swf를 가져올 때 보안 샌드 박스 위반이 발생했습니다.

SecurityError: Error #2121: Security sandbox violation: LoaderInfo.content: file:///C|/Users/something/Desktop/blablabla/myplayer.swf cannot access http://www.somedomain.com/blablabla/lalalala/abc.swf. This may be worked around by calling Security.allowDomain. 
at flash.display::LoaderInfo/get content() 
at wallplayer_fla::MainTimeline/swfLoaded()[wallplayer_fla.MainTimeline::frame1:216] 
Cannot display source code at this location. 

을 내 서버의 루트에 crossdomain.xml 파일이 "myplayer.swf"에서

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-access-from domain="*" /> 
</cross-domain-policy> 

을 나는이 : 정말 어떻게 해야할지 모르는

Security.allowDomain("*"); 
Security.allowInsecureDomain("*"); 
... 
... 
var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.checkPolicyFile = true; 
loaderContext.allowCodeImport = true; 

ldr = new Loader(); 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded); 
ldr.load(new URLRequest(graySwfFilename), loaderContext); 
... 
... 
var mcExt; 
var ldr:Loader; 
function swfLoaded(e:Event):void { 
    mcExt = MovieClip(ldr.contentLoaderInfo.content); 
    ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE, swfLoaded); 
    mcExt.x = 0; 
    mcExt.y = 0; 
    addChild(mcExt); 
} 

... 제발 도와주세요?

답변

9

솔루션 : 플렉스 4.x의 (현재 4.6) 및 AS3를위한 플래시 빌더에서 :

import flash.system.SecurityDomain; 
    import flash.system.ApplicationDomain; 
    import flash.system.LoaderContext; 
    var loaderContext:LoaderContext = new LoaderContext(); 
    loaderContext.applicationDomain = ApplicationDomain.currentDomain; 
    loaderContext.securityDomain = SecurityDomain.currentDomain; // Sets the security 

문맥 해결하기 위해 오류 # 2121

... 편지

loader.load(new URLRequest(webServerWebURL),loaderContext); 
하여 SWF를로드
1

전역 보안 설정 패널에서 작업 폴더를 추가하십시오. 이를 통해 파일 시스템의 단일 SWF에서 외부 파일을로드 할 수 있습니다. 동일한 폴더에 a.swf가 b.swf를로드하는 경우에도 동일합니다. 설정 패널

이 들어있는 폴더를 추가 "를 위치 추가"를 외부 파일을 읽는 SWF

SWF를 서버에 업로드해도 문제가되지 않습니다.

+0

와우! 고마워요! 하지만 내 컴퓨터에서만 문제가 해결됩니다. 이 플레이어를 인터넷을 통해 일부 사이트에 업로드하려고한다면 수정하지 않을 것입니다 ... 그렇지 않습니까? – hdmi3killer

+0

myplayer.swf를 웹 사이트에 구현할 때 동일한 결과를 얻을 수 있습니까? – hdmi3killer

+0

@ hdmi3killer swf의 로컬로드 제한에 대해 로컬입니다. 일단 서버에서 이러한 제한은 로딩에 영향을주지 않습니다. – jolyonruss

0

오류는 외부 도메인에서 발생합니다. 사용자가 아니라 교차 도메인 파일이 아닙니다. using a bridge file to communicate with an external api에 대한 자습서를 확인하십시오. 이 예제에서는 as3과 php를 사용했습니다. 트릭은 도메인의 교차 도메인 파일을 제어하는 ​​것입니다. 그러면 서버가 API와 통신 할 수있게하십시오.

관련 문제