|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: May 2009
Сообщений: 34
|
Загрузка изображения (Loader) с другого хоста и crossdomain: не получается
Вопрос решен, сам дурак. Надо было по ссылке всего-лишь попробовать открыть Crossdomain, апач его не выдавал.
Помогите, пожалуйста. Как только в очередной раз сталкиваюсь с политикой безопасности - так и попадаю в тупик. В этот раз не могу обойти проблему с загрузкой аватара во флешку. Флешка грузится с домена А, аватар лежит на основном сервере (Б) в подкаталогах. Вот код: 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); // Добавляю к ранее созданному объекту <?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. |
|
|||||
Регистрация: May 2009
Сообщений: 34
|
alatar, в классе Alert не используется аватар, в этом-то и вся загадка. Аватар вообще отдельно добавлен в примерно такую иерархию:
-stage --Sprite ---avatarImg:Sprite ----rect:Shape ----ldr:Loader по маске rect А класс Alert-ов вообще отдельно и никак с этим не связан. Последний раз редактировалось KIVagant; 25.12.2009 в 20:10. |
|
|||||
Регистрация: May 2009
Сообщений: 34
|
Я методом тыка уже пришел к аналогичному выводу - чтобы сделать размытость, он затрагивает битмап, но вопрос в другом - почему он ругается на политику безопасности? Ведь на обоих сайтах указан crossdomain и в коде указано его использование!
|
|
|||||
.
|
а это зачем?
Цитата:
|
|
|||||
Регистрация: May 2009
Сообщений: 34
|
dimarik, я выше указал, что на обоих сайтах crossdomain.xml присутствует в корне и привел его содержимое.
1. А crossdomain.xml зависит каким-то образом от кодировки файла? 2. Я так понимаю, флеш забирает crossdomain.xml с удаленного сервера из корневой папки? Не может же он файл политик искать в папке с аватаром? 3. Во флешке используется сокет-соединение, где сервер А, на котором сама флешка и находится, тоже генерирует файл политик и отправляет его по сокету. Может ли это как-то влиять на то, что на сервере Б crossdomain.xml не воспринимается правильно? Бред, наверное, несу. Последний раз редактировалось KIVagant; 25.12.2009 в 23:37. |
|
|||||
.
|
Для песочницы типа REMOTE, коей является http://localhost - "Обращение к содержимому в виде данных для ресурсов удаленной области действия, находящихся за пределами региона происхождения [загружающей] SWF допускается только по разрешению распространителя (с)" Колин Мук.
Поясню: "разрешение распространителя" - это правильно составленный crossdomain.xml. UPD. Гм. Сложно сейчас сказать, является ли http://localhost REMOTE. Последний раз редактировалось dimarik; 25.12.2009 в 23:55. |
|
|||||
Регистрация: May 2009
Сообщений: 34
|
Приветствую всех.
Проблема все ещё актуальна. Как загрузить картинку с другого домена, на котором создан crossdomain.xml, он доступен, содержит <allow-access-from domain="*" /> . Я думал, проблема в localhost. Но то же самое происходит и на сервере! Ошибка "Нарушение изолированной среды: BitmapData.draw:... не может осуществить доступ к... . Не предоставлен доступ к файлам политики." Или (иногда) "Необходим файл политики, но, когда были загружены эти мультимедийные данные, флаг checkPolicyFile не был установлен.". Уже пытался сделать "Security.loadPolicyFile('http://домен/crossdomain.xml');" после загрузки изображения и перед ней. Никакого результата. 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 Накопал тут аналогичные ситуации. Только там не могли изменить размер swf, а в моем случае это картинки. И если в загружаемой флешке можно указать System.security.allowDomain(), то в картинке-то этого не пропишешь! Пробовал кодировать crossdomain.xml в UTF-8. Результат тот же. |
|
|||||
.
|
Воспользуйтесь консолью 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 здесь детали. В личку скиньте ссылку на сайт, сам посмотрю. |
Часовой пояс GMT +4, время: 07:19. |
|
« Предыдущая тема | Следующая тема » |
Теги |
crossdomain , loader , изображение , политика безопасности |
|
|