Загрузите AS2 SWF в AS3 SWF и передайте переменные в URL - PullRequest
3 голосов
/ 27 января 2009

У меня есть AS3 SWF, в который я собираюсь загружать другие SWF. Все эти дочерние SWF-файлы принимают один параметр в URL. Я не могу заставить его работать при загрузке дочернего элемента AS2, и он должен быть в состоянии справиться с обоими.

так что у меня

var request:URLRequest = new URLRequest();
var loader:URLLoader = new URLLoader();

request.url = "http://domain/as2.swf?param=foo";
loader.load(request);
// etc on to the eventListeners, addChild, etc

Когда загружается as2 SWF, он не видит параметр, который я ему передал. Он ищет _root.param. Я делаю это неправильно или пытаюсь сделать невозможное?

РЕДАКТИРОВАТЬ: я должен добавить, что я могу загрузить SWF с этими параметрами URL из загрузчика AS2, и он работает просто отлично.

Ответы [ 5 ]

4 голосов
/ 27 января 2009

Связь между AS2 и AS3 нетривиальна, поскольку они работают на разных виртуальных машинах. Проверьте это http://www.gskinner.com/blog/archives/2007/07/swfbridge_easie.html для некоторых подсказок.

Редактировать: если вы не можете изменить загруженный контент as2, ваши единственные варианты - это создать загрузчик as2 «обертки», который использует приведенный выше пример для связи с as3 и взаимодействует с загруженным контентом as2 с помощью _root.varname. Это не очень красиво. но это может просто сработать.

0 голосов
/ 27 марта 2012

Вместо поиска _root.param, используйте _root._url, а затем вручную проанализируйте ваши параметры.

var url: String = _root._url;
var param: String = 'param=';
var paramStart: Number = url.lastIndexOf(param);
var paramValue: String = url.substring(paramStart + param.length, url.length);
trace(paramValue);

SWFBridge - это круто и излишне для чего-то подобного.

0 голосов
/ 22 января 2010

AS3 -> AS3

Фильм 1 (www.domain1.com): Загрузка внешнего фильма при нажатии кнопки «купить» ...

buy.addEventListener(MouseEvent.CLICK,function(){                   
    var ldr:Loader = new Loader();
    var url:String = "http://www.domain2.com/movie.swf?a=b&c=d";
    var urlReq:URLRequest = new URLRequest(url);
    ldr.load(urlReq);
    addChild(ldr);
    });

Фильм 2 (http://www.domain2.com/movie.swf):

var mc:MovieClip = this as MovieClip;
var ldi:LoaderInfo = mc.loaderInfo;
var lobj:Object = ldi.parameters as Object;

for (var l in lobj) {
    dumper.htmlText += l+" => "+lobj[l]+"<br />";
}

"dumper" - это имя поля Dynamic Textbox, расположенного в Movie2. Вывод должен выглядеть так:

a => b
c => d
0 голосов
/ 27 января 2009

Возможно, стоит попытаться назначить переменные динамически после загрузки SWF-файла, но до его добавления на сцену. Т.е..

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, movieLoaded);

function movieLoadedHandler(event : Event) : void
{
    var loaderInfo : LoaderInfo = event.target as LoaderInfo;
    var clip : DisplayObject = loaderInfo.content;

    for each(var prop in varsToTransfer)
    {
        clip[prop] = varsToTransfer[prop];
    }

    // add to parent
}

Дайте мне знать, как это происходит.

0 голосов
/ 27 января 2009

Вы делаете это неправильно.

"http://domain/as2.swf?param=foo"

Это запрос файла с именем as2.swf на сервере с именем домен . Любые параметры ? Param = foo , являющиеся частью этого http-запроса, теряются при его завершении. Если бы серверу нужно было что-то сделать в соответствии с этими переменными, он бы это сделал, но вы запрашиваете файл .swf для обнаружения этих переменных, это просто глупо.

Поместите переменную в ваш глобальный объект (глобальное пространство имен) для флэш-плеера, затем, когда файл as2 .swf будет загружен в этот флэш-плеер, он получит доступ к переменной, которую вы задали в своем глобальном объекте.

Я не опытен в as2, но в as3 доступ к глобальному объекту можно получить с помощью ключевого слова this на уровне пакета (вероятно, то же самое для as2, просто не беспокойтесь о его установке в уровень пакета).

...