我們的空中應用程序加載多個swf,它們共同組成了一課。
如果我們將它們加載爲串行而不是並行,則所有swfs中的代碼都被破壞。 (在這個問題上有一個前面的stackoverflow q)。如果它們並行加載,所有時間線頂級代碼都可以工作。
在Mac上,無論加載swfs的順序如何,所有代碼都能正常工作,包括深入嵌套MC內部MC的代碼。
在PC上,(每個swf時間軸的)頂層代碼始終有效,但深層嵌套代碼僅依賴於swfs加載完成和初始化的順序運行。
將swfs引用爲A,B,C和D,如果init的順序是A,B,C,D,那麼swf A中的代碼(僅深度嵌套代碼)不起作用 - 即使stop()不是加工。這隻發生在PC上。
如果swfs初始化的順序是B,A,C,D甚至C,B,A,D,那麼所有事情都應該如此。 (這是一個相當長的過程,確定這種模式!)
有時,不止一個加載瑞士法郎是有問題 - 我一直無法發現一個明顯的模式背後。
所有4個swfs運行良好,獨立運行。所有4個swfs在Mac版本中運行良好。所有4個swfs應該加載到他們自己的應用程序域中,因爲Air不允許其他任何事情,並且每次應用程序域也被指定爲新域。沒有可檢測到的域問題 - 沒有錯誤被拋出。
很明顯,有些東西是博克。我不相信我的代碼中存在這樣的事情,因爲應用程序在Mac上完美運行,並且僅在PC版本中依賴於加載完成順序而被破壞,並且只有深層嵌套的代碼纔會生效。
borked(帶有非功能代碼的MC)的項目不作爲符號導出到庫中。
有沒有人遇到過這個或者類似的東西?
一些變化,我將用實驗:
1)導出符號管委會與庫中的代碼,以便它們在幀1加載(Init事件觸發之前),即使他們並不需要這個。
2)不手動指定應用程序域,但讓它默認(爲相同的值)
我會在這裏記錄我的發現。任何人都可以想到其他值得改變的東西,看看是否有影響?
我想看看充滿版本的AIR版本。此外,我需要知道您在衛星模塊及其AS版本中使用的代碼類型。我希望你在Win \ * Nix \ OSX上用最新版本的AIR測試虛擬框中的所有解決方案。並在這裏發佈所有這些結果。所以我們可以幫助您找到解決方案。並且請把我和你以前的問題聯繫起來,你在上面談過。謝謝! – Eugene 2010-09-02 10:57:47
嗨尤金,我不能完整的代碼公開,因爲它是爲NDA客戶。 空氣版本是1.5.1所有代碼是AS3/FP10。 模塊使用安全加載方法來訪問主安全/應用程序域。 Win和Mac環境均運行Air 2.0.3 未設置appDomain沒有區別。 不幸的是,SO似乎刪除了我之前的問題。本質上,答案如上 - 串行加載swfs(在開始下一個之前等待INIT)導致應用程序域交叉的主要問題。奇怪的是,在同一時間加載它們,修復它。 – Stray 2010-09-02 14:13:40
迄今爲止的數據: 如果加載訂單是ACBFED,則A和B都是borked。 C沒有borkable的內容,D,E和F都很好。 如果加載順序是FDBECA一切都很好。 將第一個swf(對INIT)加載的訂單以A或B作爲第一個swf borked。 F包含與A相同的內容,可以先載入而不會被插入。 爲什麼? 感激地收到了任何線索。 – Stray 2010-09-03 20:23:00