我有一個使用調用FileReference.browse()來從用戶請求的SWF一個動畫AS3應用。如果所選的SWF是AS3,我很樂意去。但是,如果它是AS2,我需要先將它加載到AS2包裝器中(以便我的應用程序可以更改它)。所有這些文件(包括我的應用程序和包裝器)都是本地存在於用戶的機器上,但是它們選擇的文件可以存在於任何目錄中。所以要清楚:主要應用程序(AS3) - > Wrapper(AS2) - >用戶文件(AS2)通行證文件加載
我知道如何從Loader的loaderInfo.actionScriptVersion變量獲取上傳文件的ActionScript版本,並且工作正常。我的問題是如何將文件從AS3應用程序傳遞給AS2包裝器,以便它可以加載它。
我首先想到的是轉儲從一個FileReference的負載的ByteArray()函數成共享對象「曲奇」。從用戶體驗的角度來看,這種方法看起來很糟糕,但似乎最有效。但是,我一直無法在AS2中找到任何方法來將ByteArray作爲影片加載(事實上,AS2似乎沒有ByteArray類)。因此,如果有人知道從AS2中的ByteArray加載電影的方法,那麼我的問題的第一個可能的解決方案是。
我的第二個想法是通過已經建立的LocalConnection橋樑,上傳的文件的路徑傳遞給我的包裝,然後只是把它從加載該文件。但是,我無法找到任何方式來獲取文件的路徑,我的谷歌搜索表明安全模型有意防止它。更何況,我不知道我可以從用戶的機器加載任意文件。
我的「舉手之勞;我放棄了」解決方案就是創建單獨的按鈕來加載AS3和AS2文件(留給用戶猜測它是哪一個!),並讓AS2按鈕實際上在AS2包裝。然而,它看起來像AS2沒有一個文件
瀏覽
上傳API和PHP混合動力解決方案,我發現是不是一種選擇(因爲這意味着要在本地運行)。
所以,我會永遠感激,如果任何人都可以點我在正確的方向來解決這三種路障。替代解決方法當然是受歡迎的。
(編輯) 好吧,我發現AS2的版本FileReference類的文檔。它支持相同的文件瀏覽功能,但不支持直接將所選文件加載到SWF中。
然而,安全沙箱中似乎並沒有那麼嚴格的本地文件如我所料,它看起來像有一次我必須把它的路徑,我可以讀取用戶的計算機上的任何SWF。
因此,我應該可以使用JavaScript和帶有文件輸入的HTML表單來獲取文件路徑並將其傳遞給我的應用程序。從網絡瀏覽器中完成所有這些並不理想,但它應該可以工作。如果結果令人滿意,我會提交它作爲答案。
(編輯2) 刮開HTML形式的想法。看起來像JavaScript隱藏的路徑,因爲Flash隱藏它。我現在能想到的唯一選擇是讓用戶複製並粘貼文件的路徑...
AS2包裝的目的是什麼?如果將它加載到AS3加載程序中,它會執行哪些操作嗎? – 2012-03-07 20:01:13
根據我迄今爲止的研究(我只在這方面工作了幾天,所以我可能會誤)AS2和AS3應用程序運行在不能直接相互通信的單獨虛擬機中。因此,爲了使我的AS3應用程序改變上傳的AS2文件,我需要首先將我的命令通過LocalConnection橋傳遞給AS2封裝器,然後AS2封裝器將採取相應措施。我不能僅僅通過LocalConnection創建上傳文件,因爲我沒有創建它(即:沒有任何東西在聽)。 – VisibleMan 2012-03-07 20:13:57
我明白了。但根據您的意見,我認爲有一個AS3和AS2按鈕可能是最好的(唯一?)選項。如果您無法在沒有用戶輸入的情況下再次加載文件引用 - 我唯一能想到的就是使用AIR構建它並將副本寫入臨時文件,然後重新打開它,因爲您會知道文件路徑。 – 2012-03-08 04:09:24