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

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

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

Регистрация: Sep 2009
Сообщений: 12
По умолчанию Проблемы с кроссдоменной загрузкой клипа

Flash приложение содржит клип, в который грузит swf из другого домена. В обоих клипах (основном и в загружаемом) на первом кадре в руте
System.security.allowDomain("*"); Так же приложение - загрузчик открывает crossdomain.xml с сервера, на котором расположен загружаемый swf. По сути все правила доверия предусмотрены, но не работает следующее:
Загрузка производится при помощи собственного класса, основанного на movieClipLoader. Данный класс после загрузки клипа (событие onLoadComplete) программирует событие загруженного клипа onEnterFrame на инициализацию в соответствии с параметрами объекта task, который является описателем загрузки. onEnterFrame используется потому, что в момент возникновения этого события уже известны рамеры загруженного объекта и можно произвести его подгонку по размерам и установку в нужный кадр. Здесь же производится вызов пользовательской функции onLoad.
Проблема: При кроссдоменной загрузке клип загружается но не вызывает пользовательскую функцию. Так же не вызывается пользовательская функция onProgress. При этом объект task существует (проверено дебагом). Тоесть секьюрность не позволяет вызвать пользовательскую функцию.

При загрузке из того же домена, что и родительский клип все работает нормально.

Вот часть исходника загрузчика:

Код AS1/AS2:
 
// ==== ON LOAD PROGRESS ==========================================
 
private function onLoadProgress (target_mc :MovieClip, loaded_bytes :Number, total_bytes :Number)
{
	if (total_bytes < 1) total_bytes = 1;
 
	var task :Object = this.getTask({target : target_mc});
	task.progress = loaded_bytes/total_bytes;
 
	var percents = task.progress * this.progressStep;
	this.progress += percents;
 
	if (this.progress > this.progressEnd) 
			this.progress = this.progressEnd;
 
	if (task.onProgress != null)
		task.onProgress(Math.round(task.progress * 100), task);
}	
 
// ==== ON LOAD TASK COMPLETE ===================================
 
private function onLoadComplete (target_mc :MovieClip, http_status :Number)
{
	var task :Object = this.getTask({target : target_mc});
 
	target_mc.task = task;
 
	target_mc.onEnterFrame = 
 
		function()
		{
			this.task.stack.finalize(this.task);
			if (this.task.onComplete != null)
				this.task.onComplete(task);
			this.onEnterFrame = this.task.onEnterFrame;	
		}
 
 
	this.currTaskId ++;
 
	if (this.currTaskId < this.tasks.length) 
	{
		var found = false;
		var task = this.tasks[this.currTaskId];
 
		this.loadClip(task.url, task.target);
	}
	else
	{
		if (this.progress < this.progressEnd)
				this.progress = this.progressEnd;
 
		this.progressStart = this.progress;
 
		for (var i = 0; i < this.currTaskId; i ++)
		{
			this.tasks.shift();
		}
 
		this.currTaskId = 0;
	}
}
 
// ==== Finalize load task ===========================
 
private function finalize (task :Object)
{
	if (task.frame != null)
	{
		task.target.gotoAndStop(task.frame);
	}
 
	if (task.width != null ||
		task.height != null)
	{
		var w = task.width;
		var h = task.height;
 
		if (w == null) w = task.target._width;
		if (h == null) h = task.target._height;
 
		if (task.target._width > task.target._height)
		{
			if (h > w) w = h;
			h = w * task.target._height/task.target._width;
		}	
		else
		{
			if (w > h) h = w;
			w = h * task.target._width/task.target._height;
		}
 
		task.target._width = w;
		task.target._height = h;
	}


Последний раз редактировалось ilyichzc; 25.04.2010 в 00:20.
Старый 30.04.2010, 08:45
ilyichzc вне форума Посмотреть профиль Отправить личное сообщение для ilyichzc Найти все сообщения от ilyichzc
  № 2  
Ответить с цитированием
ilyichzc
 
Аватар для ilyichzc

Регистрация: Sep 2009
Сообщений: 12
Все, разобрался. Онициировать объект нужно на событии onLoadInit. А я почему то решил, что это начало загрузки.

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

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

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


 


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


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