Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка изображения (Loader) с другого хоста и crossdomain: не получается (http://www.flasher.ru/forum/showthread.php?t=134295)

KIVagant 25.12.2009 18:51

Загрузка изображения (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, при котором вызывается вывод всплывающего сообщения. Уму не растяжимо...

alatar 25.12.2009 20:01

Ошибка у вас возникает при попытке отрисовать это аватар в битмапу. Судя по всему в функции createBackground().

KIVagant 25.12.2009 20:07

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

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

alatar 25.12.2009 21:26

Alert создает "модальное" окно, соответственно для эффекта размытого фона содержимое display list, отрисовывается в битмапу, в том числе и ваш аватар.

KIVagant 25.12.2009 22:39

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

dimarik 25.12.2009 23:15

а это зачем?
Цитата:

Код AS3:

var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true; // Заставляем проверить политику


Просто вот етой хрени http://localhost/ запрещено касаться этой http://acc.ru/ потому что в последней нету, либо кривой crossdomain.xml

KIVagant 25.12.2009 23:27

dimarik, я выше указал, что на обоих сайтах crossdomain.xml присутствует в корне и привел его содержимое.

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

dimarik 25.12.2009 23:46

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

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

UPD. Гм. Сложно сейчас сказать, является ли http://localhost REMOTE.

KIVagant 26.01.2010 02:28

Приветствую всех.
Проблема все ещё актуальна. Как загрузить картинку с другого домена, на котором создан 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. Результат тот же.

dimarik 26.01.2010 10:57

Воспользуйтесь консолью 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, время: 11:55.

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