AS3 передает FlashVars загруженному SWF - PullRequest
7 голосов
/ 20 февраля 2010

У меня есть A.swf, который загружает B.swf в видеоклип и должен передать ему несколько FlashVars. При загрузке B.swf с html, я могу передать FlashVars нормально. При переходе от A.swf он получает

Ошибка № 2044: необработанная ошибка ioError :. текст = Ошибка № 2032: Ошибка потока. URL: файл:

Код в 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 он проверяет Flashvars следующим образом. Отлично работает со стороны html

this.loaderInfo.parameters.xml

Ответы [ 4 ]

17 голосов
/ 20 марта 2011

Хотя метод querystring должен хорошо работать локально, если вы используете 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

2 голосов
/ 17 октября 2011

Нет необходимости, чтобы «A» передавал FlashVars в «B». Просто имейте доступ к самому FlashVars. Следующее будет работать независимо от того, находится ли B внутри A или самого верхнего уровня:

Добавьте прослушиватель событий ADDED_TO_STAGE в конструкторе B. e.g.:

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

Когда у вас есть доступ к сцене, теперь вы можете получить доступ к FlashVars в A следующим образом:

Чтобы правильно увидеть переменную с именем myVar flashVar в 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 голосов
/ 22 февраля 2010

Как мне поставить в песочницу разрешения? Я попытался добавить папку через настройки, но это тоже не сработало.

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 голосов
/ 20 февраля 2010

вы можете добавить флэш-переменные в 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));
...