7 Stimmen

AS3 Übergabe von FlashVars an geladene swf

Ich habe eine A.swf, die B.swf auf einen Movieclip lädt und ihr einige FlashVars übergeben muss. Beim Laden von B.swf mit html, kann ich FlashVars gut übergeben. Wenn ich sie von A.swf übergebe, erhalte ich eine

Fehler #2044: Unbehandelter ioError:. text=Fehler #2032: Stream-Fehler. URL: Datei:

Der Code in A.swf lautet

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); 

In B.swf werden die Flashvars auf diese Weise überprüft. Von der HTML-Seite aus funktioniert es gut

this.loaderInfo.parameters.xml

17voto

Sean Fujiwara Punkte 4493

Obwohl die Querystring-Methode lokal problemlos funktionieren sollte, gibt es für Flash Player 10.2 eine neue API für diese Funktion.

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

Die Dokumentation finden Sie hier: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/LoaderContext.html#parameters

2voto

Es ist nicht notwendig, dass "A" FlashVars an "B" weitergibt. Es genügt, wenn B selbst auf die FlashVars zugreift. Das Folgende funktioniert unabhängig davon, ob sich B innerhalb von A oder auf der obersten Ebene selbst befindet:

Fügen Sie einen ADDED_TO_STAGE-Ereignis-Listener im Konstruktor von B hinzu. z.B.:

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

Wenn Sie Zugriff auf die Bühne haben, können Sie nun auf die FlashVars in A auf diese Weise zugreifen:

Um eine Variable namens myVar flashVar in B.swf zu verwenden, tun Sie das (innerhalb von B):

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

stage.loaderInfo ist das, worauf Sie achten müssen.

0voto

Daniel Punkte 28370

Sie können die Flash-Vars in die URI einfügen, wenn Sie sie laden

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

Das Problem ist, dass die Zeichenkette, die Sie in die uri geladen haben, in ein Objekt eingefügt wird. loaderInfo.parameters Wenn Sie also diese Parameter übergeben wollen, müssen Sie eine Zeichenkette erstellen, in die Sie diese übergeben.

hier ist ein Skript von http://ragona.com/blog/pass-flashvars-loaded-swf/ die zeigt, wie man das wieder in ein String-Array umwandelt

//:: 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));

0voto

Robin Punkte 11

Wie kann ich die Berechtigungen in einer Sandbox unterbringen? Ich habe versucht, den Ordner über die Einstellungen hinzuzufügen, aber auch das hat nicht funktioniert.

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

Ich habe ein einfaches, neues Projekt erstellt. Dies ist der komplette Code.

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);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X