AIR에서 Loader의 사용시 주의할 점
May 18
AIR, Nike's ActionScript AIR, AIR1.5, Error #3015, loadBytes, LoaderContext, SecurityError 4 Comments
최근에 회사에서 튜토리얼 형태의 콘텐츠를 제작했습니다. 자원에 대한 보안 문제들과 로딩시간의 문제점들이 있어 자원(이미지, swf)을 외부에서 로드해 와서 보여주는 방식으로 제작을 했습니다. 근데 클라이언트 측에서 설치 버젼도 필요하다고 하셔서 AIR로 패키징을 하려고 테스트를 해보니 아래와 같이 SecurityError가 발생하더군요.
Loader의 loadBytes() 메서드가 실행가능한 코드를 허용하지 않는다고 나옵니다. 이 문장만 가지고는 정확히 무슨 문제인지 알 수 없어서 검색을 해보니 이 에러를 당한 이유를 알 수 있었습니다. API 문서에도 명시가 잘 되어있더군요.
명시되어있는 내용을 쉽게 설명하자면 이미지는 그냥 불러와도 되지만 actionscript가 포함되어있는 swf같은 경우에는 LoaderContext클래스의 allowLoadBytesCodeExecution속성을 true로 설정해줘야 한다는 거죠~ 아무래도 AIR같은 경우에는 보안이 더 까다로워서 이런 절차가 더 필요한 듯 싶습니다. 하지만 저 allowLoadBytesCodeExecution속성은 AIR에서만 사용할 수 있는 속성이라서 Loader를 라이브러리에서 사용하는 경우 이에 대해서 각각 actionscript project와 AIR project에 대응하는 클래스를 2개를 만들 수도 없고 난감합니다. 실제로 프로젝트를 하다 보면 actionscript project로 개발 후 AIR로 패키징 하는 경우가 꽤 많을 것입니다. 그래서 Loader를 사용하는 클래스에 아래의 코드를 추가 했습니다.
context = new LoaderContext;
if( 'allowLoadBytesCodeExecution' in context ){
context.allowLoadBytesCodeExecution = true;
}
LoaderContext클래스의 객체인 context에 allowLoadBytesCodeExecution 속성이 존재하면 무조건 true로 설정해주는 것입니다. 이렇게 하면 actionscript project에서도 오류가 발생하지 않고 AIR project에서도 오류가 발생하지 않습니다. 그래서 결론은 Loader를 이용한 라이브러리를 제작하셨다면 위의 코드를 추가해야 AIR에서 사용시에도 오류 없이 잘 쓸 수 있다는 것입니다.
RSS

May 27, 2010 @ 00:18:12
좋은 팁 감사합니다.ㅎㅎ
May 28, 2010 @ 00:25:41
응~ ㅎㅎ
Jun 11, 2010 @ 11:22:18
FP 10.1로 넘어오면서 이 속성이 FP의 기본속성이 된 듯 합니다. 물론 다른이름으로요. http://help.adobe.com/ko_KR/Flash/CS5/AS3LR/flash/system/LoaderContext.html#allowCodeImport
이걸 한번 보시죠 ^^
이제 allowLoadBytesCodeExecution 속성은 무용지물된 듯합니다.
Jun 11, 2010 @ 13:19:35
아하~ 이제 저 속성으로 통일이 된 모양이네요 ㅎㅎ
오늘 정식으로 FP10.1과 AIR2.0이 릴리즈 됐으니 API좀 많이 훑어봐야겠어요.
이렇게 달라진 속성들이 없는지..
아무튼 정보 감사합니다 ^^