2010-11-18 2 views
2

as2 SWF를 AIR 응용 프로그램에로드하고 있습니다. 파일에서로드하면 제대로 작동합니다. 바이트에서로드 때, 그것이 어떤 방법으로 나뉩니다Loader.load 및 Loader.loadBytes의 차이점

var bytes:ByteArray = ... //loaded from resources 
var loader:Loader = new Loader(); 
var context:LoaderContext = new LoaderContext(false); 
context.allowCodeImport = true; //this is neccessary 
// Method 1 - blocks some scripts in loaded SWF 
//context.applicationDomain = new ApplicationDomain(); 
// (application domain has no effect with as2 swf) 
//context.securityDomain = SecurityDomain.currentDomain; //gives error 2114: securityDomain must be null 
loader.loadBytes(bytes, context); 
// Method 2 - loads properly 
//loader.load(new URLRequest(file.url)); 

그래서 왜 그냥 파일에서로드 (이것은 마우스에 반응하지만, 일부 요소는 비활성)? 내 리소스는 암호화로 보호되며 디스크에 덤프 할 수 없으며 보호해야합니다.

에서 어떤 트릭이 올 Y 르게로드합니까??

similar question이 있지만 제 경우에는 as2가 더 많은 문제를 일으 킵니다.

답변

4

AS2와 AS3은 다른 런타임 (바이트 코드가 다릅니다)을 사용하므로 AS3 런타임에서 AS2 바이트 코드를 올바르게 실행할 수 없습니다. 기본적으로 AS2 코드를 AS3 응용 프로그램에 삽입하므로 작동하지 않습니다./

+0

답변 해 주셔서 감사합니다. 나는 왜 같은 AVM1 코드가 파일에서 로딩 될 때 완전히 작동하는지 궁금하며, 바이트에서 로딩 될 때 부분적으로 손상된다. – alxx

+1

'load' 메서드는 SWF를 자산으로 처리하고 AVM1 인스턴스에서이를 실행하는 것을 알고 있기 때문에'loadBytes' 메서드는 AVM1 바이트 코드를 문제를 일으키는 AVM2 바이트 코드로 삽입하기 때문입니다. – gthmb

+0

어쩌면 이것이 옳은 것입니다 (Adobe 엔지니어 만이 알 수 있습니다.) 어쨌든 이것이 버그 인 것 같습니다. 나는 AS2 SWF (동일한 기능이 다른 방식으로 만들어 짐)를 다시 만들어 냄으로써 오래 전에 문제를 해결했지만 직접적인 해결책은 발견되지 않았습니다. – alxx

2

LoaderContext 설명서에 따르면 ActionScript 3.0 SWF를로드 할 때만 applicationDomain 속성 만 사용해야합니다. 해당 매개 변수를 삭제 (또는 null로 설정)하고 결과를 확인하십시오.

+2

모든 조합의 매개 변수 (null 도메인도 있음)를 시도했지만 맞습니다. AVM1과 AVM2 상호 작용이 도청당한 것 같습니다. – alxx

+0

이것에 하프하지 않는 것이지만, AVM1 바이트 코드를 AVM2 swf로 주입하기 때문에 작동하지 않습니다. / – gthmb