2010-02-20 114 views
7

我有一個A.swf,它將B.swf加載到一個動畫片段並需要傳遞一些FlashVars。當用html加載B.swf時,我可以很好的傳遞FlashVars。當從A.swf傳遞時,它會得到一個AS3將FlashVars傳遞到加載的swf

錯誤#2044:未處理ioError :.文本=錯誤#2032:流錯誤。網址:文件:

在A.swf中的代碼是

var request:URLRequest = new URLRequest ("B.swf"); 

var variables : URLVariables = new URLVariables(); 
variables.xml = "test.xml"; 

// This line causes the error 2044, else B.swf loads fine with FlashVars 
request.data = variables; 

loader.load (request); 

B.swf中,它被檢查Flash變量,像這樣。它工作正常,從HTML側

this.loaderInfo.parameters.xml 
+0

這是一個含糊不清的問題。有兩部分: 1)如何讓FlashVars進入B,我在下面回答。 2)如何從A中傳遞任何類型的變量到B中。 – 2011-12-07 16:27:43

回答

0

您可以添加Flash變量到URI當加載它

URLRequest(String("B.swf" + "?myvar=45")); 

的問題是,當你加載URI中的字符串,它被放在在對象loaderInfo.parameters中,所以如果你想傳遞這些參數,你需要創建一個字符串來傳遞這些參數。

這裏是從http://ragona.com/blog/pass-flashvars-loaded-swf/一個腳本,顯示如何一遍轉換成字符串數組

//:: Store loader info 
var lInfo:Object = this.root.loaderInfo.parameters; 
//:: Flashvars 
var fVars:String = "?whee=nada"; //:: Getting the syntax change (? --> &) out of the way with a dummy var 

//:: Set path + data 
for (var flashVar in lInfo) 
{ 
    fVars += "&" + flashVar + "=" + lInfo[flashVar]; 
} 

var myRequest:URLRequest = new URLRequest(String("/myPath.swf" + fVars)); 
+0

謝謝,但我忘了提及,我也嘗試過,它給出了同樣的錯誤。 我看到一個頁面提到,因爲傳遞FlashVars無法與本地swf一起工作,是這個問題嗎? – Robin 2010-02-20 18:40:37

+0

我認爲沒有理由不工作,但你可以嘗試「沙盒」的文件夾的權限。 – Daniel 2010-02-21 10:47:36

0

如何沙箱的權限?我嘗試通過設置添加文件夾,但那不起作用。

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html#117502

我做了一個簡單的新項目。這是完整的代碼。

var mc:MovieClip = new MovieClip(); 

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, OnComplete); 

var request:URLRequest = new URLRequest ("B.swf"); 

var variables : URLVariables = new URLVariables(); 
variables.xml = "test2.xml"; 

// This line causes the error 2044, if i comment out, it runs fine without FlashVars 
request.data = variables; 

loader.load (request); 


function OnComplete (e:Event) 
{ 
    trace ("On Complete"); 
    mc = e.currentTarget.content as MovieClip; 
    addChild (mc); 
} 
+0

我發現有什麼問題。如果我在普通flash播放器中運行swf,但它在我使用Ctrl + Enter從編輯器啓動時的調試版本不起作用。但我無法再調試嗯.. – Robin 2010-02-22 10:57:28

+0

跟蹤(Security.sandboxType),給我localTrusted。我添加了Security.allowInsecureDomain(「*」),但仍然沒有去。 – Robin 2010-02-22 11:38:46

17

雖然查詢字符串的方法應該做工精細本地,如果你正在使用Flash Player 10.2,有這個新的API。

var context:LoaderContext = new LoaderContext(); 
context.parameters = {'xml': 'test.xml'}; 
loader.load(request, context); 

的文檔是在這裏: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/LoaderContext.html#parameters

+1

我希望我可以投票十次...... – 2011-05-16 19:35:20

+0

似乎要從API中刪除。 '參數'是undefined :( – roberkules 2011-07-05 11:30:55

+0

@roberkules你是否瞄準了正確版本的Flash? – 2011-07-05 19:27:27

2

這是沒有必要的 「A」 通過Flash變數 「B」。只需讓B訪問FlashVars本身。以下內容適用於B是否位於A或頂層本身:

在B的構造函數中添加ADDED_TO_STAGE事件偵聽器。例如:

function B(){ 
    this.addEventListener(Event.AddedToStage, onAddedToStageHandler); 
} 

當你訪問階段,你現在可以訪問在Flash變量一個是這樣的:

要正確地看到一個名爲myVar Flash變數B.swf中的變量,你這樣做(內B) :

private function onAddedToStageHandler(){ 
var flashVars : Object = LoaderInfo(this.stage.loaderInfo).parameters; 
// now you have access to your flashVars! 
trace(flashVars.myVar); 
} 

stage.loaderInfo是你需要看的。

+0

謝謝。在我看來最好的解決方案。 – 2011-11-30 23:44:04

+0

我也這麼認爲:) – 2011-12-07 14:42:32