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

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

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

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
По умолчанию Проблемы с отображением AVM1 в AVM2

Есть 2 домена, на одном (допустим домен А) swf c AS3, на другом (допустим домен Б) swf c AS2.
На домене Б лежит crossdomain.xml

Загружаю из Б в А swf, примерно так:

Код AS3:
var url:String = "http://домен Б/some.swf";
var urlReq:URLRequest = new URLRequest(url);
var ldrCntx:LoaderContext = new LoaderContext();
	ldrCntx.checkPolicyFile = false;
	ldrCntx.securityDomain = SecurityDomain.currentDomain;
var ldr:Loader = new Loader();
	ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
	ldr.load(urlReq, ldrCntx);
 
function onLoaded(e:Event):void
{
	addChild(e.target.content);
}
При тестах локально выдает ошибку безопастности, а при работе на домене A никаких ошибок, но в swf из домена Б отображается только анимация, скрипты не работают.

При тестах локально с таким кодом:
Код AS3:
var url:String = "http://домен Б/some.swf"; 
var urlReq:URLRequest = new URLRequest(url);
var ldr:Loader = new Loader();
	ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
	ldr.load(urlReq);
 
function onLoaded(e:Event):void
{
	addChild(e.target.content);
}
swf из домена Б работает без проблем с анимацией и со скриптами, но при работе в сети вываливается ошибка безопасности.

Что я делаю не так, и как заставить корректно работать swf из домена Б в swf c домена А?

P.S. Флешки не общаются друг с другом, просто скрипты в загружаемой флешке не работают по отношению к ней же.
__________________
trace("Остановите Землю, я сойду!!!");

Старый 21.05.2009, 20:12
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
прописать System.security.allowDomain("*"); в подгружаемой флешке не поможет?
и грузить в дефолтовый securityDomain

Старый 21.05.2009, 20:55
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 3  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
System.security.allowDomain("*"); прописывал, не помогает.

А по подробнее про "грузить в дефолтовый securityDomain" можно?
Т.е вместо ldrCntx.securityDomain = SecurityDomain.currentDomain;
заменить на ldrCntx.securityDomain = null;
так?
__________________
trace("Остановите Землю, я сойду!!!");

Старый 21.05.2009, 22:27
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
да я сам не слишком ориентируюсь, сори
как я понял, по умолчанию флешка с другого домена грузится в контексте своего security domain, а с ldrCntx.securityDomain = SecurityDomain.currentDomain; в контексте загружающего, как если бы она было загружена с того же домена..
вот и подумалось, что с allowDomain("*") могло бы сложиться и с дефолтовой загрузкой, походу устранив косяк.., но это только предположение

Старый 21.05.2009, 23:41
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 5  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Спасибо. за совет, но косяк устранился через "дырку", но все же хотелось бы понять как это делается документированными методами.

Кто нить в курсе?
__________________
trace("Остановите Землю, я сойду!!!");

Старый 22.05.2009, 00:29
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Что за дырка, поясните.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 22.05.2009, 02:11
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 7  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Я не знаю дырки это или нет, одно из решений загрузки контента в обход политик безопасности демонстрировал __etc недавно, нечто подобное и у меня есть, но это, так сказать, временные заплатки, которые может и прикроют скоро. Хотелось бы решать проблемы "легальными" и надежными методами.
Решения через серверные скрипты-прокси не в счет.
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 22.05.2009 в 02:13.
Старый 22.05.2009, 08:51
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
loadBytes что ли?

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

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
нет не bytes и loadBytes, чуток по другому

Код AS3:
private function onLoadData(event:Event):void
		{
			var xml:XML = new XML(event.target.data);
			var loader:Loader = new Loader();
			var context:LoaderContext = new LoaderContext();
 
			loader.load( new URLRequest(xml.@url.toString()), context );
			loader.contentLoaderInfo.addEventListener(Event.INIT, onButtonLoaded);
 
			bannerLink = xml.@link.toString();
		}
 
 
 
		private function onButtonLoaded(event:Event):void
		{
			var ldrInfo:LoaderInfo = event.target as LoaderInfo;
			var unrealContent:DisplayObject;
 
			try
			{
				// это в случае если нет проблем с security
				unrealContent = ldrInfo.loader.content;
			}
			catch(err:SecurityError)
			{
				// Fuck Flash Sequrity
				var loaderContainer:Sprite = new Sprite();
 
				loaderContainer.addChild(ldrInfo.loader);
				unrealContent = loaderContainer as DisplayObject;
			}
 
			mcUsualBannerContainer.addChild(unrealContent);
			mcUsualBannerContainer.mouseChildren = false;
			mcUsualBannerContainer.mouseEnabled = false;
 
			btLink.addEventListener(MouseEvent.CLICK, onClick);
		}
__________________
trace("Остановите Землю, я сойду!!!");

Старый 23.05.2009, 12:06
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Я не понял в чем тут «обход».

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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