Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   BitmapData не работает в браузере (http://www.flasher.ru/forum/showthread.php?t=176319)

LanSelven 07.03.2012 09:02

BitmapData не работает в браузере
 
Написал функцию копирования мувика через BitmapData:
Код AS1/AS2:

import flash.display.BitmapData;
function duplicateMC(mc:MovieClip,mc2:String,Level:MovieClip,mcx,mcy) {
        if (Level==undefined) Level = _root;
        mcBMP = new BitmapData(mc._width, mc._height, true, 0x0FFFFFF);
        mcBMP.draw(mc);
        Level.createEmptyMovieClip(mc2, Level.getNextHighestDepth());
        Level[mc2].attachBitmap(mcBMP,Level.getNextHighestDepth());
        Level[mc2]._x = mcx;
        Level[mc2]._y = mcy;
}

Кстати, между делом. Как задавать значение параметров по умолчанию у функции? :)

Так вот. С копированием обычных мутиков все как надо. А вот с копированием мувиков, которые представляют собой загруженные картинки из вне, возникают проблемы. Причем настоящая мистика. Все хорошо работает, когда просматриваю в самом редакторе Flash. Но не работает в браузере.

Между делом вот так выглядит загрузка картинки и запихивание в мувик, который в дальнейшем будем копировать.
Код AS1/AS2:

var movieClipLoader:MovieClipLoader = new MovieClipLoader();
var obj:Object = new Object();
obj.onLoadInit = function(target:MovieClip) {
        _root.nextFrame(); //Загрузка как бы завершенна и можно идти дальше.
};
movieClipLoader.addListener(obj);
_root.createEmptyMovieClip("lib", _root.getNextHighestDepth()); //создаем мувик-библиотеку, где будут храниться загруженные картинки
lib._visible = false; //делаем ее невидимой
_root.lib.createEmptyMovieClip("newImage", _root.lib.getNextHighestDepth()); //создаем контейнер для картинки
movieClipLoader.loadClip("http://i.imgur.com/VzARL.jpg", _root.lib.newImage); //стартуем загрузку

А вот так в следующем кадре вызывается функция:
Код AS1/AS2:

duplicateMC(_root.lib.newImage,"b",_root,0,0);

*Не работает во всех браузерах

Флешка в браузере добавляется вот так:
Код:

var params = {wmode:'transparent', scale:'scale', loop:'false', menu:'false',flashvars:""};
swfobject.embedSWF('/flash/wtf.swf','swf', 550, 400, '8.0.0',{},{},params,{});

:)

mooncar 07.03.2012 10:48

Цитата:

Сообщение от LanSelven (Сообщение 1067643)
Все хорошо работает, когда просматриваю в самом редакторе Flash. Но не работает в браузере.

Уточнить бы надо -
1. Не работает, будучи залитым на хостинг?
2. Если так, то i.imgur.com - тот же ли это домен, с которого флешка загружается?

LanSelven 07.03.2012 11:15

1. И на Денвере не работает и будучи залитым на хостинг. В общем везде.
2. imgur.com - просто популярный фотохостинг. Американский вроде.
Попробовал разные варианты, похоже какой-то трабл с безопасность
Нашел пару вариантов, которые все же работают в браузере:
а) локальная ссылка.
Код:

/img/picture.jpg
б) И полная ссылка, но на тот же сайт, где лежит флешка.
Код:

http://mysite.ru/img/picture.jpg
Картинки передаваемые полной ссылкой со сторонних сайтов почему-то не отображаются.

mooncar 07.03.2012 11:20

Тогда дело в том, что на сервере, где картинки лежат, т.е. на i.imgur.com нет файла-кросдоменника, который бы разрешал использовать картинки.
Этот файл флешке не требуется, если она тестируется из IDE, в дебаг-плеере.

LanSelven 07.03.2012 11:47

Замечу, что картинки отображаются то всегда, со всех ссылок. Но копировать через BitmapData не всегда удается.

mooncar, так что-то можно сделать, чтобы все работало?

mooncar 07.03.2012 12:01

Цитата:

Сообщение от LanSelven (Сообщение 1067658)
Замечу, что картинки отображаются то всегда, со всех ссылок. Но копировать через BitmapData не всегда удается.

Все правильно, так и должно быть. По прямым ссылкам картинки будут открываться, и в дебаг-плеере картинки будут отрисовываться в BitmapData. Но если флешку ты разместил на ресурсе, чье доменное имя отличается от домена, с которго грузишь контент, то использовтаь его так не удасться, правила доступа, которые устанавливет владелец ресурса, не позволяют этого.
Цитата:

Сообщение от LanSelven (Сообщение 1067658)
так что-то можно сделать, чтобы все работало?

Нет. Разве что хозяева ресурса явно разрешат использовать размещенный у себя контент путем внесения домена с твоей флешкой в свой кроссдоменник.

LanSelven 07.03.2012 12:06

Понятно. Как вариант наверное копировать картинки на сервер и потом уже отображать.
Спасибо большое, mooncar.

mooncar 07.03.2012 12:21

Вообще, я проверил, файл http://i.imgur.com/crossdomain.xml существует, вот его содержание:
Код:

<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
<site-control permitted-cross-domain-policies="master-only"/>
</cross-domain-policy>

Судя по тому, что здесь написано, такой кроссдоменник должен разрешать грузить сторонним флешкам контент для использования - стоит звездочка.
Запись master-only всего лишь указывает, что "файл /crossdomain.xml является единственным допустимым файлом политики на сервере".

Вывод - надо проверять, идет ли вообще запрос на файл http://i.imgur.com/crossdomain.xml. Проверить можно сниффером, например в FireFox я использую плагин HttpFox.
Если не идет, то вначале явно загружать файл политик, то есть этот кроссдоменник, если флешка автоматически его не запрашивает.


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

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