본문 바로가기

Flex

SecurityError: Error #2070 - Stage/requireOwnerPermissions()

어플리케이션에서 SWFLoader 를 사용하여 다른 도메인의 SWF 파일을 불러올때 나는 에러이다.

SecurityError: Error #2070: 보안 샌드박스 문제가 발생했습니다. 호출자 http://호출된domain/aaa.swf은(는) http://호출한domain/2008.swf이(가) 소유한 스테이지에 액세스할 수 없습니다.
    at flash.display::Stage/requireOwnerPermissions()
    at flash.display::Stage/addEventListener()
    at mx.flash::UIMovieClip/creationCompleteHandler()[E:\dev\flex\sdk\frameworks\projects\flash-integration\src\mx\flash\UIMovieClip.as:2432]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()


분명히 crossdomain.xml 도 확인 했고.. 재밌는건 에러를 무시 하고 나면 정상적으로 로딩이 된다. (이경우는 나만 그런건지도 모른다..)

독립적으로 돌아가는것을 확인 했고.. 스테이지를 왜 엑세스 할수 없다고 하는건지 전혀 감이 안잡혔는데.
구글링을 하던 도중 Embed 된 것들에 문제가 있는경우의 키워드를 획득!
css 부터 뒤지기 시작했다.

Embed 되는것은 어차피 컴파일 단계에서 swf 에 포함되는 것인데.. 왜 그것때문에 에러가 나는지 고민하던중 문제를 찾아냈다.

css 에서 이미지를 불러오면서 라이브러리 swc를 사용한 부분에서 에러가 났다.

보통 css 에서 이미지를 embed 시키는 경우 소스는.

.PanelTypeApp {

 borderSkin: Embed(source="../images/panelType01.png",
  scaleGridTop="171",scaleGridLeft="21",scaleGridRight="267",scaleGridBottom="180");
}


위와 같이 직접 소스에 이미지 경로를 넣게 된다.

플레시에서 스킨을 만들어서 export 해서 사용 하는경우는.

.PanelType1 {
	borderSkin: Embed(skinClass="Panel_borderSkin01");
}


이런식으로 swf의 클래스를 참조해서 가져오게 된다.
두 방식 다 Embed는 되지만 swc 같은 경우에는 라이브러리로 참조되어있어서 아마도 이 값을 다시 한번 찾는게 아닌가 싶다.
참조를 찾기 때문에 스테이지에 엑세스 할 수 없다고 에러가 나지만..
실제로는 Embed 되어있기 때문에 에러를 무시 하게 되면 이미지는 표시 되는 것이 아닌가 싶다.

이 에러는 오늘 처음 만난 에러라서 케이스가 이거 하나 뿐이라 정확한 이유는 아닐수도 있으니 비슷한 경우를 겪은 분이나 왜 저런식으로 문제가 해결 되는지 이유를 아시는 분은 댓글이나 트랙백을 남겨주셨으면 합니다.