簡體   English   中英

Flash / AS3安全性 - 將movieclip引用傳遞給子swf?

[英]Flash/AS3 security - passing movieclip reference to child swf?

我在預加載器和主應用程序類(所有AS3 / Flash CS4)之間的交互方面看到了一些奇怪的行為。 粗略地說,這是事件的流程:

  1. Preloader.swf加載兩個東西:main.swf,它是主應用程序,以及由文本和圖像組成的自定義對象的資源,由預加載器從各種URL組裝到對象中。

  2. 加載完成后,Preloader會將main.swf添加為子項。 然后預加載器調用
      的init(myCustomObject) 
    在main.swf上,其中myCustomObject是在步驟1和期間由預加載器匯編的對象的引用
      public function init(customObject:CustomObject):void) 
    是Main.as中的方法簽名。 (Preload.as將Main轉換為類型為*的對象,以便能夠調用任意函數而不必擔心編譯時錯誤。)

  3. Main.as實際上是應用程序本身的容器,因此它實例化了一個
      新應用程序(customObject); 
    傳遞對preloader組裝的customObject的引用,並將其作為子項添加。

我已經安裝了thunderbolt,所以我可以在應用程序運行時記錄消息,這就是我已經確定的事情。 在步驟3中實例化Application對象是導致問題的原因; 由於某種原因,語句myMainApplication = new Application(customobj); 在Main.as中拋出一個可愛的#1009錯誤,通常表示空指針引用或類似的東西。

奇怪的是,我已經向Application.as添加了一些日志記錄,它似乎正在接收對customObject的引用而沒有問題; Application的構造函數中的customObject上調用toString()准確返回預期的數據。

換句話說,語句myMainApplication = new Application(customobj); 在Main.as似乎是成功的並且在同一時間失敗了。 是什么賦予了?

我的猜測是你的應用程序域中的轉換,所以盡管類型是相同的文件,但在每個應用程序域的內存中它們是兩個獨立的具體類型。 有很多方法可以解決這個問題,可能從加載到兄弟應用程序域而不是子域開始,或者不打算使用強制轉換並在無類型對象上顯式調用有問題的函數。

如果它實際上是這個問題, WeLoveAppDomain應該有一些幫助。 你能把最小的例子放在一起來證明這個失敗讓我們解構嗎?

確保Flash Player中的全局安全設置允許本地訪問該目錄。

試試這個。 轉到發布設置 - 本地回放安全性 - 選擇“僅限訪問網絡”。 Flash CS4默認為“僅訪問本地文件”,它可能不喜歡。 我希望這很有用。

請參閱: http//www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/system/Security.html

我想我們需要看到更多代碼,但要開始:“customobj”......你在哪里定義? 您在其他地方引用“customObject”。 那是一個錯字嗎? 如果確切的語句拋出錯誤,則“customobj”很可能為null。

您使用的是FlexBuilder / FlashDevelop還是Flash IDE? 另外,你是如何設置Preloader的?

如果使用FlexBuilder / FlashDevelop構建應用程序,是否在編譯器選項中指定了幀起始?

myMainApplication = new Application(customobj); 似乎是成功並且同時失敗的是我沒有完全理解try/catch塊在AS3中的運行方式。 Application的構造函數的子例程中拋出了一個空指針異常,發生在Application檢查的代碼之后,以確保它接收對customobj的引用。 圍繞在MainApplication瞬間的try/catch塊捕獲了這個錯誤,因為它是最近的封閉錯誤檢查代碼。

希望我的錯誤會拯救別人制造類似的一個!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM