2010-04-15 25 views
0

我正嘗試在我的Adobe AIR應用程序中加載外部SWF。加載的SWF正嘗試訪問URL以通過XML檢索一些信息。 當單獨啓動SWF時,它工作正常。當從File.applicationStorageDirectory加載SWF時,我將得到一個安全錯誤,因爲加載的應用程序在本地與文件系統Sandbox中執行相當。 第一個問題:有沒有辦法改變這個?加載的SWF正在網絡沙盒中運行?Adob​​e Air中的安全行爲

由於第一次嘗試沒有奏效,我已將SWF移至app://目錄。 現在我會得到一個安全錯誤,因爲在應該檢索XML數據的服務器上沒有策略文件。 第二個問題:爲什麼在單獨運行SWF時策略文件不是必需的,但在嘗試從應用程序Sandbox加載數據時是必需的?我究竟做錯了什麼?

提前致謝!

回答

1

這是我的解決方案。

我正在做一個基於ActionScript的應用程序btw。我的目標是創建一個AIR應用程序,根據給定的互聯網資源按需加載不同的模塊。這兩個應用程序正在使用child/parentSandboxBridge進行通信。

我正在使用SWFLoader類,但未正確通過LoaderContext和allowLoadBytesCodeExecution(或allowCodeImport for AIR2.0)。當我傳遞一個LoaderContext與提到的變量時,我得到了一個VerifyError:錯誤#1053:由於AIR應用程序使用Flex 4.0完成,並且加載的SWF使用Flex 3.5進行編譯,因此在mx.managers.SystemManagerProxy中激活了非法覆蓋。

雖然loadForCompatibility屬性設置爲true,但引發錯誤的原因在於,傳遞LoaderContext對象時,SWFLoader類沒有爲兼容性設置必要的applicationDomain。所以我做了自己的applicationDomain設置,一切都像魅力一樣。 如果有人對此過程感興趣,只需查看SWFLoader :: loadContent方法即可。在Flex 4中,有趣的部分從第1836行開始。