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

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

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

Регистрация: Jun 2009
Сообщений: 35
По умолчанию Политика безопасности Flash-плеера и не только

Привет.
Помогите решить проблему, бьюсь уже часа три, не меньше.

Что хочу сделать?

Хочу сделать некий wrapper.
Т.е. флешка грузит еще одну флешку внутрь себя, далее идет работа с подгруженной флешкой (addChild, интерактив).

Использую следующий код в wrapper'е:

Код AS3:
public function Main():void 
{
if (stage) init();
else this.addEventListener(Event.ADDED_TO_STAGE, init);
}
 
public function init(event:Event = null):void
{
this.removeEventListener(Event.ADDED_TO_STAGE, init);
 
stage.dispatchEvent(new Event(Event.DEACTIVATE)); 
stage.dispatchEvent(new Event(Event.ACTIVATE));
 
 
loadExeption();
}
 
public function loadExeption():void
{
 
Security.allowDomain("*"); 
Security.allowInsecureDomain("*");
 
loaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;
 
if (Security.sandboxType != 'localTrusted') 
{
loaderContext.applicationDomain = ApplicationDomain.currentDomain;
loaderContext.securityDomain = SecurityDomain.currentDomain;
}
 
m_loader = new Loader();
m_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
 
m_loader.load(new URLRequest("xxx.ru/my.swf"), loaderContext);
}
 
public function onCompleteHandler(e:Event):void
{
addChild(m_loader);
}
Вроде все правильно, ошибок при компиляции нет, realtime ошибок тоже.

А что не так?

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


Адрес wrapper'a (Preloader'a): xxx.ru/preloader.swf (условно).
Адрес подгружаемой swf-шки: xxx.ru/my.swf (условно).

Лежат на одном домине, с ними рядом лежит:
crossdomain.xml, листинг:

Код:
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-http-request-headers-from domain="xxx.ru" headers="*"/>
<allow-access-from domain="xxx.ru" to-ports="80"/>
</cross-domain-policy>
Использую swfobject.js, в index.html (index.php) кусок кода, ответственный за флешку:
Код:
...
var params = {
menu: "false",
scale: "noScale",
allowFullscreen: "true",
allowScriptAccess: "always",
allowNetworking: "always",
bgcolor: "#000000"
};
...
swfobject.embedSWF("preloader.swf", "altContent", "600", "580", "10.0.0", "expressInstall.swf", flashvars, params, attributes);
У второй флешки есть событие added_to_stage, костыль с активацией/деактивацией.

Самое интересное, что локально это все работает нормально.
Т.е. заливаю на хостинг my.swf, локально компилирую preloader.swf — работает на ура. Как стоит мне залить preloader.swf на хостинг, то возникает такая ситуация. Сталкивался кто?

Старый 15.06.2011, 03:07
Reon вне форума Посмотреть профиль Отправить личное сообщение для Reon Найти все сообщения от Reon
  № 2  
Ответить с цитированием
Reon
 
Аватар для Reon

Регистрация: Oct 2005
Сообщений: 97
Привет, первое, я бы не стал лодер в аддЧайлд совать (addChild(m_loader) а его контент. Проверь права доступа к файлу на хостинге.

Старый 15.06.2011, 03:21
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 3  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
И ещё... Уже пару раз на форуме было: если документ-класс в обоих флешках имеет одно имя (и пакет), например Main(), то это может быть причиной глюков.

Старый 15.06.2011, 10:23
forhaxed вне форума Посмотреть профиль Отправить личное сообщение для forhaxed Найти все сообщения от forhaxed
  № 4  
Ответить с цитированием
forhaxed

Регистрация: Jun 2009
Сообщений: 35
Спасибо дорогие друзья, особенно fish_r.

Действительно, сменил название главного класса в флешке с Main на Wrapper - все заработало.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
если документ-класс в обоих флешках имеет одно имя (и пакет), например Main(), то это может быть причиной глюков
Причиной глюков обычно бывает то, что курит разработчик.
А надо было разобраться почему так происходит и просто поменять applicationDomain, в который идет загрузка
__________________
...вселенская грусть

Старый 15.06.2011, 19:08
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 6  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Причиной глюков обычно бывает то, что курит разработчик.
А надо было разобраться почему так происходит и просто поменять applicationDomain, в который идет загрузка
не понимаю - решаете проблему (создания однояйцевых близнецов) созданием другой (потерей доступа к типам загруженных классов)?

Старый 15.06.2011, 20:59
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 7  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Причиной проблемы является то, что в ApplicationDomain уже есть класс с таким именем.
Возможны 2 решения:
а) переименовать класс
б) загрузить в домен, в котором класса с таким именем нет

Решение б) является универсальным, т.к. один модуль по определению не будет пересекаться с другим, при любых названиях классов. Более того, при таком подходе модуль можно выгрузить.
Решение а) является прямолинейным и не позволяет Вам делать одинаковые названия классов в разных модулях

Цитата:
потерей доступа к типам загруженных классов
Можно подробнее - что куда потеряется? И какие, кстати, типы у классов Вы знаете?
__________________
...вселенская грусть

Старый 15.06.2011, 21:53
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 8  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Встреча двух классов с одинаковым именем в одном домене - есть уже признак кривизны. Исправлять надо то, что криво, и автор, в данном случае, имеет такую возможность, а вы предлагаете "лечить" ситуацию "костылями", по факту.

То что называется проверкой типов на этапе исполнения, напр. я уже не смогу обратиться к методу загруженного класса
Код AS3:
  Wrapper(e.target.content).init();
Мне придётся обходить "строгую проверку" приведя к object или перем. к *, и то, и другое, пусть даже формально, плохо сказывается на быстродействии...

А ты о каких типах подумал?

Старый 15.06.2011, 22:15
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 9  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
вы предлагаете "лечить" ситуацию "костылями"
Если костыль - это частное решение, которое работает только в некоторых случаях, то Ваше решение - костыль.

Цитата:
Встреча двух классов с одинаковым именем в одном домене - есть уже признак кривизны
Правильно. Ваш способ переносит ответственность за это на загружаемый модуль (то есть подстраивает имя класса под то место, в которое будет загружаться). Мой способ переносит ответственность на загружающий модуль.
Однако, т.к. домен (а значит и наличие в нем класса с каким-то именем) определяется именно загружающим модулем, то свой способ я считаю верным, а Ваш - нет.

Цитата:
я уже не смогу обратиться к методу загруженного класса
То, что Вы умеете делать и можете делать - это разные вещи. Судя по всему, идея с написанием интерфейса Вас еще не посещала.
__________________
...вселенская грусть

Старый 15.06.2011, 22:53
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 10  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
@gloomy можешь говорить мне "ты" не опасаясь панибратства


Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Если костыль - это частное решение, которое работает только в некоторых случаях, то Ваше решение - костыль.
Несколько экзотическое определение "костыля".
Я имел ввиду вообще то вот это.

Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Правильно. Ваш способ переносит ответственность за это на загружаемый модуль (то есть подстраивает имя класса под то место, в которое будет загружаться). Мой способ переносит ответственность на загружающий модуль.
Однако, т.к. домен (а значит и наличие в нем класса с каким-то именем) определяется именно загружающим модулем, то свой способ я считаю верным, а Ваш - нет.
В общем звучит разумно, однако, если не учитывать частность, что речь идет о Main(), от которого у меня, лично уже, скоро, аллергическая сыпь появится.

Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
То, что Вы умеете делать и можете делать - это разные вещи. Судя по всему, идея с написанием интерфейса Вас еще не посещала.
Да-к, ещё и интерфейс навоять?
И, кстати, не пойму: как мне поможет интерфейс в отсутствии доступа к типам?

Вот это - костыль:
Изображения
 


Последний раз редактировалось fish_r; 15.06.2011 в 23:00.
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
flash , loader , loaderContext , безопасность
Опции темы
Опции просмотра

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

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


 


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


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