Просмотр полной версии : Доступ к переменным
Каким образом Правильно можно организовать доступ к переменных одной флешки к переменным второй влешки. если первая флешка подгружается во вторую?
amexdesign
22.01.2009, 12:02
есть различные способы, например передовать параметры через LocalConnection или через _level...
RidingTheFlash
22.01.2009, 12:07
аналогичная проблема - пробовал через LocalConnection(соседний пост), но что-то не так. Передать-то передаёться, но как присвоить для дальнейшей обработки?var sending_lc:LocalConnection = new LocalConnection();
sending_lc.send("lc_name", "methodToExecute", 15); //отправитель. 15 - значение для передачи.
var receiving_lc:LocalConnection = new LocalConnection();//получатель.
receiving_lc.methodToExecute = function(param:Number) {
parametr = param;
}
receiving_lc.connect("lc_name");
var pageCount = parametr;//как правильно передать этот параметр в pageCount?
Или опишите пжлста как через _level это сделать...
Да, хотелось бы услышать есть ли еще какой способ.
Я пробовал много вариантов.
Отвечаю на поставленный вопрос.
В работе с загруженной флешкой и любым мувиклипом в составе базовой флешки - нет никакой разницы, кроме ограничения с атачем символов из библиотеки. Никаких LocalConnection тут не надо.
ttxt2.text=_global._docRoot.pic_path; //вот тут ее тоже не видно
var load_pic;
load_pic= new MovieClipLoader();
load_pic.onLoadComplete=function(){//закончили загрузку
this.pic._width=640;
this.pic._height=480;
ttxt2.text=_global._docRoot.pic_path;//вот тут переменную видно
};
load_pic.loadClip(_global._docRoot.pic_path, pic);//а вот тут та же самая переменная не определена
link.onRelease=function()
{
ttxt2.text=_global._docRoot.pic_path;//вот тут ее видно
getURL(_global._docRoot.url_path,_new);
}
Врезультате получается что ее видно Везде. кроме как там где с ее помощью нужно подгрузить картинку, как так?
Боюсь сморозить глупость. я не профи, но в событии onEnterFrame видно все переменные, как вы и сказали. НО. Вне этого события (функции которая его обрабатывает Не видно. А всунуть в эту функцию подгрузку картинки не получается)
Добавлено через 9 минут
Проблему решил, но конечно 100% что коряво. Хотелось бы узнать можно ли это сделать более практично.
var receiving_lc:LocalConnection = new LocalConnection();//получатель.
receiving_lc.methodToExecute = function(param:String) {
str1 = param;
ttxt3.text=param;
load_pic.loadClip(param, pic);
}
receiving_lc.connect("lc_name");
То, что вы пытаетесь сделать не возможно по определению - пока вы не определили переменную она будет неопределенной, это значит, что никакого значения в ней храниться не будет, о чем вам плеер и сообщает.
корме того, в тот момент как ваша рука тянется напечатать слова типа "_global", "_root", "_level" - сразу хватайте линейку другой рукой и по польцам, по пальцам :)
Но...
1. Все эти переменные определены в первой флешке, из которой идет подгрузка этой. Т.е. они есть и в них есть значение.
2. Я уже смог сделать так чтобы все отображалось. Но. На другом хосте все то же самое и не работает. Поэтому и хочу узнать каким это образом делается нормально, а не так как у меня через ... общем отак от)
ОЙ! Миг прозрения! Черт. Словно яблоком по голове. А эти переменные должны быть определены ДО подгрузки флеши или можно позже?
Добавлено через 13 минут
Задал и ничего не получилось.
Да, кстати на локали все работает и ОТЛИЧНО
Траблы начинаются когда заливаю все это на сервер. С чем может быть связано?
Добавлено через 28 минут
Может ли что-то блокировать чтение этих переменных?
Флешка Точно подгружается но доступа к переменным нет. Пробовал (пальцы от линейки просто синие) все варианты:
test1.text=_root.pic_path
test2.text=_global._docRoot.pic_path
test3.text=_level0.pic_path;
test4.text=_global.pic_path;
test5.text=pic_path;
При это переменная pic_path ТОЧНО определена во флешке куда происходит подгрузка этой флешки. И опять же на локали Все работает. Откудого такие траблы на сервере?
А зачем вы их туда пихаете? в смысле в _global... ну, не знаю, если вы мазохист, тогда лучше вместо того, чтобы линейкой, ну, не знаю, пива выпить / музыку послушать...
объявите переменную у объекта, который у вас есть. Eсли это загружающая SWF, то если _lockroot == true в подгружаемой она будет _parent для пeрвого контейнера в визуальной иерархии клипов.
Если наоборот, то загруженная SWF будет находиться там, где был до этого клип, который вы использовали для ее загрузки.
Ну и естесственно не нужно забывать про политики безопасности, если загружающая и загружаемая флешки пришли из разных домейнов, то нужно чтобы они друг другу разрешали доступ к своим переменным. Делается это с помощью XML файла с политиками безопасности, либо в загружаемой и загружающей флешке должно быть указано какие домейны имеют право на получение данных содержащихся в ниx.
Не. я не мазохист, это издержки непонимания сути происходящих процессов, а вот насчет пива это спасибо за идею )):drinks:
Не сочтите за наглость, но можно немного подробней по каждому пункту?
Например как сказать флешкам кому куда можно доступаться?
Что такой _lockroot = true ?
Я над этой траблой уже 2-е сутки, не день а именно сутки бьюсь. На локали работает, выделил тестовую площадку в инете - работает. А у заказчика на серваке не хотит. Сей форум - последняя инстанция. То что у меня всего 10 сообщений. а зарегестрирован я бог знает когда говорит о том что я свои проблемы привык решать сам и беспокою людей только в крайнем случае. Сегодня именно такой случай. Буду очень признателен за любую помощь.
Можно немного разъяснить насчет _parent. Т.е. если я объявляю переменную в подгружаемой флешке то могу стукнуть к тем что были в основной через парент. Для этого они должны быть там просто объявлены как меременные.
Не совсем понял что значит "В противном случае". Это если _lockroot = false ? И как тогда до нее достукаться?
Загружаемя и загружающая флешки в принципе не могуп получить данные друг из друга если соблюдены следующие условия:
плеер выше 6-й версии
_url свойство не содержит один и тот же URL [минус] имя флешки
в отдающей данные флешке не указано Security.allowDomain("домейн откуда пришла запрашивающая данные флешка").
Что делает _lockroot = true (в загруженой флешке) ссылка _root в ней будет указывать не на _root загрузившей, а на ее родной. т.е.
Если политики безопасности позволяют, то следующее выражение будет верным:
Псевдо
if (loadedSWF._lockroot)
{
loadedSWF._root != loadedSWF._root._parent._root;
} else {
loadedSWF._root == loadedSWF._root._parent._root;
}
Но, логичнее всего не опираться на таймлайн т.е. 1 раз получить референс к клипу из которого надо строить приложение и больше никогда не обращаться к _root.
Спасибо за потраченное время, очень вам благодарен.
Сейчас все опробую.
Добавлено через 48 минут
Выяснилась одна очень пикантная интересность.
Если грузить урл с плеером который подгружает ту самую флешку БЕЗ WWW (т.е. указав адрес без него) то ничего не работает.
А вот если С WWW (www.somdomain.net/player.php - скажем так) тогда все работает.
И это не первый раз когда это самое WWW каким-то образом влияет на ход выполнения флешки. Как так?
И последний может самый наивный из мегодняшних вопросов. Как подгрузить флешку из инета. Т.е. скажем www.somdomain.net/flash.swf. Через обычный мувиклип лоадер у мена не вышло. Ссори если сморозил глупость.
Добавлено через 19 часов 29 минут
Скорее всего трабл в настройках сервера.
Проверил на другом серваке - все работает и без www
Может кто знает какие настройки сервака могли повлиять?
www это точно такая же часть доменого имени, как и следующая за ним, а то что www.example.com может привести вас на ту же станицу, что и example.com - это вообще даже случайность :) т.е. просто владелец 208.77.188.166 зарегистрировал свой ИП как www.example.com и как example.com (точно так же, как вы можете создать несколько ярлыков для C:\ )
Но, плеер не умеет сам находить какой ярлык на что указывает, он просто проверяет равенство двух строковых значений. Поэтому с точки зрения плеера www.example.com != example.com.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.