2010-11-18 41 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)); 

那麼爲什麼不直接從文件加載它?我的資源受加密保護,我無法將它們轉儲到磁盤 - 它們仍然必須受到保護。

可能存在什麼樣的技巧從字節正確加載

similar question,但在我的情況下as2導致更多的問題。

回答

4

AS2和AS3使用不同的運行時(字節碼不同),因此您將無法在AS3運行時正確執行任何AS2字節碼。您基本上是將AS2代碼注入AS3應用程序,因此它不會工作:/

+0

感謝您的回答。我想知道爲什麼相同的AVM1代碼在從文件加載時完全工作,並且從字節加載時部分中斷。 – alxx 2010-11-19 17:53:54

+1

我認爲這是因爲'load'方法將SWF視爲一項資產,並且知道它將在AVM1實例中運行,而'loadBytes'方法會將AVM1字節碼注入到導致問題的AVM2字節碼中。 – gthmb 2010-11-19 18:08:43

+0

也許這是對的(只有Adobe工程師可能確定)。無論如何,看起來這是錯誤。我很早以前通過重新制作AS2 SWF解決了這個問題(相同的功能以不同的方式完成),但沒有找到直接的解決方案。 – alxx 2011-06-20 13:05:49

2

根據LoaderContext的文檔,只應在加載ActionScript 3.0 SWF時使用applicationDomain屬性。嘗試刪除該參數(或將其設置爲空)並查看會發生什麼。

+2

這是正確的,雖然我嘗試了所有參數組合(空域也)。看起來沒有解決方案 - AVM1和AVM2的交互是錯誤的。 – alxx 2010-11-20 09:46:42

+0

不要在這上面豎琴,但它是因爲你將AVM1字節碼注入到AVM2 swf中,它不會工作:/ – gthmb 2010-12-02 04:23:33