Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.12.2009, 18:51
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 1  
Ответить с цитированием
KIVagant

Регистрация: May 2009
Сообщений: 34
Question Загрузка изображения (Loader) с другого хоста и crossdomain: не получается

Вопрос решен, сам дурак. Надо было по ссылке всего-лишь попробовать открыть Crossdomain, апач его не выдавал.

Помогите, пожалуйста. Как только в очередной раз сталкиваюсь с политикой безопасности - так и попадаю в тупик. В этот раз не могу обойти проблему с загрузкой аватара во флешку. Флешка грузится с домена А, аватар лежит на основном сервере (Б) в подкаталогах.


Вот код:
Код AS3:
			var context:LoaderContext = new LoaderContext();
			context.checkPolicyFile = true; // Заставляем проверить политику
			var ldr:Loader = new Loader(); 
			ldr.mask = rect; 
			var url:String = src;// "http://127.0.0.1/users/Avatar.jpg"; 
			var urlReq:URLRequest = new URLRequest(url); 
			ldr.load(urlReq, context);
			ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function() { A.Warning.show('Аватар не найден ' + src, null, 1, false); } );
			ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, function() {
				ldr.x = (100 - ldr.contentLoaderInfo.width) / 2;
			});
			avatarImg.addChild(ldr); // Добавляю к ранее созданному объекту
На обоих доменах в корневой папке лежит crossdomain.xml с содержимым:
Код:
<?xml version="1.0"?> 
<!-- http://www.foo.com/crossdomain.xml --> 
<cross-domain-policy> 
<allow-access-from domain="*" /> 
</cross-domain-policy>
Получаю ошибку:
SecurityError: Error #2122: Нарушение изолированной среды: BitmapData.draw: http://localhost/flash/flash.swf не может осуществить доступ к http://acc.ru/users/Avatar.jpg. Необходим файл политики, но, когда были загружены эти мультимедийные данные, флаг checkPolicyFile не был установлен.
at flash.display::BitmapData/draw()
at com.dVyper.utils::Alert/createBackground()
at com.dVyper.utils::Alert/show()
at classes.game::Blocks/loginOnClick()

Кстати, сами аватары при этом загружаются, но на событие onClick по логину почему-то выкидывает эту ошибку.

P.S.: Почему на этом форуме регулярно исчезает обработка тегов? Часто захожу в темы, где вместо нормального вида - сплошные BBCode. Жму "Предпросмотр сообщения" - первый раз нормально, второй раз исчезают кнопки "отправить" и в просмотре не обработаны теги.

P.P.S.: Только что проверил - самое интересное, что ошибка появляется при нажатии не на картинку, а именно на сторонний TextField, при котором вызывается вывод всплывающего сообщения. Уму не растяжимо...


Последний раз редактировалось KIVagant; 26.01.2010 в 13:37.
Старый 25.12.2009, 20:01
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Ошибка у вас возникает при попытке отрисовать это аватар в битмапу. Судя по всему в функции createBackground().

Старый 25.12.2009, 20:07
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 3  
Ответить с цитированием
KIVagant

Регистрация: May 2009
Сообщений: 34
alatar, в классе Alert не используется аватар, в этом-то и вся загадка. Аватар вообще отдельно добавлен в примерно такую иерархию:
-stage
--Sprite
---avatarImg:Sprite
----rect:Shape
----ldr:Loader по маске rect

А класс Alert-ов вообще отдельно и никак с этим не связан.


Последний раз редактировалось KIVagant; 25.12.2009 в 20:10.
Старый 25.12.2009, 21:26
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Alert создает "модальное" окно, соответственно для эффекта размытого фона содержимое display list, отрисовывается в битмапу, в том числе и ваш аватар.

Старый 25.12.2009, 22:39
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 5  
Ответить с цитированием
KIVagant

Регистрация: May 2009
Сообщений: 34
Я методом тыка уже пришел к аналогичному выводу - чтобы сделать размытость, он затрагивает битмап, но вопрос в другом - почему он ругается на политику безопасности? Ведь на обоих сайтах указан crossdomain и в коде указано его использование!

Старый 25.12.2009, 23:15
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
а это зачем?
Цитата:
Код AS3:
var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true; // Заставляем проверить политику
Просто вот етой хрени http://localhost/ запрещено касаться этой http://acc.ru/ потому что в последней нету, либо кривой crossdomain.xml
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 25.12.2009, 23:27
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 7  
Ответить с цитированием
KIVagant

Регистрация: May 2009
Сообщений: 34
dimarik, я выше указал, что на обоих сайтах crossdomain.xml присутствует в корне и привел его содержимое.

1. А crossdomain.xml зависит каким-то образом от кодировки файла?
2. Я так понимаю, флеш забирает crossdomain.xml с удаленного сервера из корневой папки? Не может же он файл политик искать в папке с аватаром?
3. Во флешке используется сокет-соединение, где сервер А, на котором сама флешка и находится, тоже генерирует файл политик и отправляет его по сокету. Может ли это как-то влиять на то, что на сервере Б crossdomain.xml не воспринимается правильно? Бред, наверное, несу.


Последний раз редактировалось KIVagant; 25.12.2009 в 23:37.
Старый 25.12.2009, 23:46
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Для песочницы типа REMOTE, коей является http://localhost - "Обращение к содержимому в виде данных для ресурсов удаленной области действия, находящихся за пределами региона происхождения [загружающей] SWF допускается только по разрешению распространителя (с)" Колин Мук.

Поясню: "разрешение распространителя" - это правильно составленный crossdomain.xml.

UPD. Гм. Сложно сейчас сказать, является ли http://localhost REMOTE.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 25.12.2009 в 23:55.
Старый 26.01.2010, 02:28
KIVagant вне форума Посмотреть профиль Отправить личное сообщение для KIVagant Найти все сообщения от KIVagant
  № 9  
Ответить с цитированием
KIVagant

Регистрация: May 2009
Сообщений: 34
Приветствую всех.
Проблема все ещё актуальна. Как загрузить картинку с другого домена, на котором создан crossdomain.xml, он доступен, содержит <allow-access-from domain="*" /> .

Я думал, проблема в localhost. Но то же самое происходит и на сервере!
Ошибка "Нарушение изолированной среды: BitmapData.draw:... не может осуществить доступ к... . Не предоставлен доступ к файлам политики."
Или (иногда) "Необходим файл политики, но, когда были загружены эти мультимедийные данные, флаг checkPolicyFile не был установлен.".

Уже пытался сделать "Security.loadPolicyFile('http://домен/crossdomain.xml');" после загрузки изображения и перед ней. Никакого результата.

Код AS3:
 
var context:LoaderContext = new LoaderContext(true);
				context.checkPolicyFile = true;
				var ldr:Loader = new Loader(); 
				ldr.mask = rect; 
				var url:String = src;
				var urlReq:URLRequest = new URLRequest(url);
				ldr.load(urlReq, context);
				ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function() { } ); // не найден рисунок
				ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, function() {
					if (ldr.contentLoaderInfo.width > 0)
					{
						ldr.x = (100 - ldr.contentLoaderInfo.width) / 2;
					}
				});
				avatarImg.addChild(ldr); //Объект типа Sprite
Добавлено через 1 час 53 минуты
Накопал тут аналогичные ситуации. Только там не могли изменить размер swf, а в моем случае это картинки. И если в загружаемой флешке можно указать System.security.allowDomain(), то в картинке-то этого не пропишешь!

Пробовал кодировать crossdomain.xml в UTF-8. Результат тот же.

Старый 26.01.2010, 10:57
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Воспользуйтесь консолью firebug, сниффером или подобным инструментом, чтобы убедиться, что сервер отдает файл политик.

Кодировка crossdomain.xml UTF-8 обязательна.

Гляньте глазками что происходит.

Для этого используйте дебаг-версию флешплеера. Настройте свой mm.cfg
Лежит здесь (Windows Vista)
C:\Users\{USERNAME}\mm.cfg

Содержание примерно такое
Код:
TraceOutputFileName=C:\Users\{USERNAME}\AppData\Roaming\Macromedia\Flash Player\Logs\flashlog.txt
ErrorReportingEnable=1
MaxWarnings=0
TraceOutputFileEnable=1
PolicyFileLog=1   # Enables policy file logging
#PolicyFileLogAppend=1  # Optional; do not clear log at startup
Сюда будут падать сообщения о событиях политики безопасности

C:\Users\{USERNAME}\AppData\Roaming\Macromedia\Flash Player\Logs\policyfiles.txt

здесь детали.

В личку скиньте ссылку на сайт, сам посмотрю.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
crossdomain , loader , изображение , политика безопасности
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:55.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.