Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Изолированная среда в плеере 11.4 (http://www.flasher.ru/forum/showthread.php?t=183537)

RAlfDog 24.08.2012 20:11

Изолированная среда в плеере 11.4
 
После обновления на версию 11.4 перестали загружаться картинки с серверов ВК!

Пример, гружу картинку http://vkontakte.ru/images/inline_video_play.png:
В ответ приходит SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2"

Подскажите, пожалуйста, где найти значение кода этой ошибки?
P.S. Еще позавчера эта картинка грузилась нормально.

Aquahawk 24.08.2012 20:19

Есть такое. Только вы её не просто ведь загружаете? Вы к ней в bytes лезете, наверно чтобы в битмапдату срисовать. раньше так обходили ограничение безопасности. Теперь его пофиксили.

RAlfDog 24.08.2012 20:26

Да, но не сразу же я лезу, а значительно потом.
Всё равно?

И т.е. теперь никак её не заdraw'вить ?

caseyryan 24.08.2012 20:35

Цитата:

Теперь его пофиксили.
Стало быть закрыли все-таки дырку... Не есть гуд.
Цитата:

И т.е. теперь никак её не заdraw'вить ?
А где приложение находится, которое ее грузит? Контекст загрузки уже не в моде?

RAlfDog 24.08.2012 20:46

Приложение на другом домене, не загружено на vk.com или vkontakte.ru.
Контекст тоже, конечно же, включён.
Кроссдомайн такой (http://vkontakte.ru/crossdomain.xml):
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-http-request-headers-from domain="vk.com" headers="*"/>
<allow-http-request-headers-from domain="vkontakte.ru" headers="*"/>
<allow-http-request-headers-from domain="vkadre.ru" headers="*"/>
<allow-http-request-headers-from domain="*.vkadre.ru" headers="*"/>
<allow-access-from domain="vk.com" to-ports="80"/>
<allow-access-from domain="vkontakte.ru" to-ports="80"/>
<allow-access-from domain="vkadre.ru" to-ports="80"/>
<allow-access-from domain="*.vkadre.ru" to-ports="80"/>
</cross-domain-policy>

Aquahawk 24.08.2012 20:48

Всё никак. Самая лажа с аватарами, их теперь нормально не поскейлить.

Добавлено через 30 секунд
Только если через свой сервак гонять.

RAlfDog 24.08.2012 20:59

К Bitmap'у картинок тоже теперь не добраться, чтобы smoothing включить ?

caseyryan 24.08.2012 21:06

Цитата:

Самая лажа с аватарами, их теперь нормально не поскейлить.
В смысле? Даже если приложение залито в контакт? Оо
я просто еще не проверял

maxkar 24.08.2012 21:20

Цитата:

В смысле? Даже если приложение залито в контакт?
В контакте нормально. Для почти всех аватаров кросдоменники нормальные (допускают для приложения из контактовского домена грузить картинки). Нельзя только для игроков "без аватара" картинку загрузить, вот там кроссдоменника нет (она на каком-то отдельном сервере лежит).

Ну да, грузить нужно без хаков, через loader + usePolicyFile.

Aquahawk 24.08.2012 21:31

Не все приложения залиты вконтакт напрямую, многие живут в iframe и домен другой.

PeTa4eK 25.08.2012 16:05

Аналогичная проблема(флешка висит в IFrame на нашем сервере). Давайте дружно ее решать. Какие альтернативы?
Пытался загружать картинки через JS и отправлять во флешку через ExternalInterface, получилась лажа, долго грузит, обработать входящие данные не выходит.

GBee 25.08.2012 16:53

а почему через loadBytes нельзя?

caseyryan 25.08.2012 17:42

на первой странице обсуждалось. Закрыли эту дыру все-таки

Aquahawk 25.08.2012 20:15

Мы просто отказались от перерисовки в битмапдаты. В принципе не так уж и ужасно получилось. Только проблема дать людям делать скриншоты с экрана, там аватар нету, это пока не решили.

Sozonov 29.08.2012 14:22

А вариант с загрузкой маленькой флешки на сервер контакта, которая будет грузить аватары, а основное приложение (которое iframe) будет загружать эту флэшку и требовать с нее аватарки?

Я пробовал, все равно вываливается ошибка безопасности. У кого-нибудь получился этот метод?

RAlfDog 29.08.2012 18:32

Какая именно ошибка?
Флешка загруженная в ВК не может добраться к байтам загруженной с ВК картинки?
Или вторая флешка не получает уже профитченную (loadBytes) картинку из первой флешки?

Sozonov 29.08.2012 18:42

Ошибка:
Код AS3:

exception, information=SecurityError: Error #2123: Нарушение изолированной среды: LoaderInfo.content: ............ не может осуществить доступ к .......................... Не предоставлен доступ к файлам политики.

loadBytes я не использую. Как я понял это был хак, который и прикрыли. Поправьте, если я не прав.

Еще вопрос. В данный момент все устроено так: во влешке, которая загружена в контакт есть экземпляр класса, который грузит аватарки. Основная флешка качает swf, берет этот экземпляр и вызывает у него метод load.
Вот я думаю по сути же я инициализирую загрузку с внешней флешки? Или я опять ничего не понимаю?

AlexCooper 29.08.2012 19:01

У меня флешка залитая вконтакт так же не видит фотки

caseyryan 29.08.2012 19:03

Цитата:

Вот я думаю по сути же я инициализирую загрузку с внешней флешки?
Нет, если она уже находится на домене vk.com, то она не будет внешней. Даже если флешка изначально лежит на другом домене, но потом подгружается во флешку находящуюся в контакте, она сможет нормально качать аватарки оттуда
Цитата:

У меня флешка залитая вконтакт так же не видит фотки
А контекст загрузки используется?
У меня все нормально видит

RAlfDog 29.08.2012 19:05

loadBytes не прикрыли как таковой, он работает если картинка загружена с разрешённого домена.

Я думал вы грузите в основную флешку другую из ВК с Security.allowDomain, заданного для домена первой. А эта вторая (из ВК) грузит фотки из ВК, преобразует их в bitmap и отдает после этого первой.

Может так стоит попробовать?

AlexCooper 29.08.2012 19:10

Цитата:

У меня все нормально видит
взглянуть на ваш загрузчик можно?

Цитата:

А контекст загрузки используется?
Код AS3:

package src {
 
        import flash.display.Loader;
        import flash.display.LoaderInfo;
        import flash.events.Event;
        import flash.utils.ByteArray;
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.net.URLRequest;
        import flash.display.Sprite;
        import flash.events.SecurityErrorEvent;
        import flash.events.IOErrorEvent;
 
        public class loadPictures extends Sprite {
 
                public var bitmap:Bitmap;
                private var aurl:String = "";
 
                public function loadPictures($url):void {
 
                        loading($url);
                }
 
                private function loading($url):void {
 
                        bitmap = new Bitmap();
 
                        var req:URLRequest = new URLRequest($url);
                        var _picLoader:Loader = new Loader();
                                _picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loader2ByteArray);
                                _picLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
                                _picLoader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
                                _picLoader.load(req);
                }
 
                private function securityErrorHandler(e:SecurityErrorEvent):void {
                        trace("security error");
                        loading(aurl);
                }
 
                private function errorHandler(info:IOErrorEvent):void {
 
 
                        loading(aurl);
 
                }
 
                private function loader2ByteArray(evt:Event):void {
 
                        //addChild(evt.target.content);
 
                        //dispatchEvent(new Event("LOAD_COMPLETE"));
 
 
                        var lInfo:LoaderInfo = LoaderInfo(evt.target);
                        var ba:ByteArray = lInfo.bytes;
 
                        reloadByteArray(ba);
                }
 
                private function reloadByteArray(ba:ByteArray):void {
 
                        var reloader:Loader = new Loader();
                                reloader.loadBytes(ba);
 
                                reloader.contentLoaderInfo.addEventListener(Event.COMPLETE, reloaderComplete);
                }
 
                private function reloaderComplete(evt:Event):void {
 
                        var imageInfo:LoaderInfo = LoaderInfo(evt.target);
 
                        var bmd:BitmapData = new BitmapData(imageInfo.width,imageInfo.height);
 
                                bmd.draw(imageInfo.loader);
 
                        bitmap = new Bitmap(bmd);
                        bitmap.smoothing = true;
                        addChild(bitmap);
 
                        dispatchEvent(new Event("LOAD_COMPLETE"));
                }
        }
}

Добавлено через 1 минуту
Там, где комментировал, пытался отключить, не использовать bytes но результата это не дало.

zuxul 29.08.2012 19:16

Код AS3:

_picLoader.load(req, new LoaderContext(true));



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

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