Просмотр полной версии : Как отобразить картинку со стороннего сайта во флеш?
carver_joy
04.02.2011, 16:43
Ребята собственно такой вопрос, как отобразить картинку со стороннего сайта во флеше + еще интересует как реализовать загрузку текста тоже с другого сайта, например из файла text.txt расположенного например по адресу http://site.ru/text.txt
1. Изображения и сторонние swf.
Посмотрите пример по классу MovieClipLoader.
Например, откройте новый проект, вставьте следующий код в кадр и проверьте его работу:
var cont:MovieClip = this.createEmptyMovieClip('container_mc', this.getNextHighestDepth());
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.loadClip('http://www.flasher.ru/forum/images/russian/flasher_logo.gif', cont);
Только есть одно важное обстоятельство: полноценно использовать загруженный контент можно только при наличии разрешения со стороны владельца сайта. Технически это выражается в том, что на стороннем сайте должен находится кросдоменник, т.е. файл политики безопасности crossdomain.xml (обычно лежит в корне), в котором указаны домены, флешкам с которых разрешено грузить и использовать их контент.
Без такого разрешения мало что можно сделать с загруженным. Например, можно изменить масштаб или аналогичные простые действия:
var cont:MovieClip = this.createEmptyMovieClip('container_mc', this.getNextHighestDepth());
var mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadInit = function (mc:MovieClip)
{
mc._xscale = mc._yscale = 50;
};
mcl.addListener(listener);
mcl.loadClip('http://www.flasher.ru/forum/images/russian/flasher_logo.gif', cont);
, однако более сложные действия без кроссдоменника с разрешением не получатся (например, отрисовать и манипулировать битмапой).
Отдельно обращаю внимание:
1) Оперировать загруженным начинать можно только изнутри обработчика события onLoadInit, как видно из примера выше. Это связано с асинхронностью работы кода, требуется отследить момент готовности загружаемого контента для начала каких-либо действий с ним.
2) Проверять лучше всего не из среды разработки, так как в ней все будет работать и без кросдоменника, а непосредственно либо из standalone плеера, либо будучи уже залитым на хостинг.
2. Текст и переменные из файлов.
По второму вопросу - ситуация похожая.
Только класс там нужно использовать LoadVars. В хелпе есть множество примеров по использованию методов этого класса, предназначенных для загрузки текстовой информации из файлов. Для загрузки и отображения текста "as is" используйте метод load и обработчик события onData. Для получения набора значений переменных и их разбора - обработчик onLoad.
Вообще, если с хелпом дружите, то проблем у вас быть не должно, в нем масса примеров по методам и свойствам этих классов. Но и на форуме есть много примеров для конкретных ситуаций.
Не вздумайте только использовать такие функции как loadMovie (для картинок) или loadVariables (для текста). Морально устарели и влекут за собой кучу проблем при попытке полноценного использования загруженного.
mooncar, в очередной раз у вас шикарный ответ.
Спасибо. Удобно тем, что потом можно ссылку давать.
Из таких ссылок можно составить краткий курс для начинающих :)
carver_joy
05.02.2011, 22:36
mooncar,
Громадное спасибо - так много всего расписали! Все сидел делал, старался самостоятельно разобраться, но у меня некоторые вопросы все же остались, в коде написал:
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.load("data.xml");
xmlData.onLoad = function(success:Boolean){
//вот например отсюда данные могут попасть
a = 1;
}
//вот сюда?
txt.text = a;
Такое ощущение, что за onLoad они не могут выбраться даже _global
_______________
И немного про другое:
http://flasher.ru/forum/showthread.php?t=146415&highlight=loadVars&p=948129
var strings:Array = [];
var lv:LoadVars = new LoadVars();
lv.onData = lv_onDataHandler;
lv.load("1.txt");
function lv_onDataHandler(source:String):Void
{
strings = source.split("\r\n");
}
Я так понимаю данные считанны в массив strings, а что там в коде добавить, чтоб работать с ними как с массивом? Чтоб можно вывести на экран например вот так:
txt.text = strings[3]; //в текстовом поле отобразиться 3я строка из файла 1.txt
Вот этого не понял. И еще раз большое спасибо за подробное разъяснение!
По первому вопросу — onLoad вызывается, когда произошла полная загрузка, это не зависит от выполнения самого кода. В вашем случае переменная "a" будет инициализирована только после полной загрузки, но вы же пытаетесь ее использовать сразу же после того, как начали загрузку.
По второму вопросу — все, вроде правильно. Функция split возвращает массив из элементов строки, разделенных каким-либо символом.
split("") вернет массив из символов, по одному.
split("\n") вернет массив из строк.
Автор, совет вам по первому вопросу.
Я, например, все внешние данные стараюсь получать еще в прелоадере, в котором учитываются загрузка их всех. После перехода в рабочий кадр все данные становятся уже доступны.
PS. Не надо никаких _global.
PPS. На будущее. Один вопрос - одна тема.
Просто так, до кучи, относительно анализа кода. Удобно для анализа ХМЛ-ей. Сам недавно нашел и везде теперь втыкаю. А то фиг поймешь что где глючит.
if (xmlData.status != 0)
{
var errorMessage:String;
switch (xmlData.status)
{
case -2 :
errorMessage = "A CDATA section was not properly terminated.";
break;
case -3 :
errorMessage = "The XML declaration was not properly terminated.";
break;
case -4 :
errorMessage = "The DOCTYPE declaration was not properly terminated.";
break;
case -5 :
errorMessage = "A comment was not properly terminated.";
break;
case -6 :
errorMessage = "An XML element was malformed.";
break;
case -7 :
errorMessage = "Out of memory.";
break;
case -8 :
errorMessage = "An attribute value was not properly terminated.";
break;
case -9 :
errorMessage = "A start-tag was not matched with an end-tag.";
break;
case -10 :
errorMessage = "An end-tag was encountered without a matching start-tag.";
break;
default :
errorMessage = "An unknown error has occurred.";
break;
}
trace ( "XML Structure Error:"+prof.status+" - "+errorMessage
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.