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

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

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

Регистрация: May 2011
Сообщений: 25
По умолчанию AS 3 + JS ( ExternalInterface.addCallback )

Здравствуйте.
Бьюсь над проблемой вызова функций из JS, но ничего не работает. Файрфокс ничего не говорит, а ИЕ ругается "объект не поддерживает свойство или метод".

HTML:

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
	<title>File Uploader - adylevy.com</title>
	<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
	<script type="text/javascript" src="js/swfobject.js"></script>
	<script type="text/javascript">
		var flashvars = {};
		flashvars.path = "";
		var params = {};
		params.menu = "false";
		params.scale = "noscale";
		params.salign = "tm";
		params.allowScriptAccess = "always";
		params.swliveconnect = "true";
		var attributes = {};
		attributes.align = "middle";
		
		swfobject.embedSWF("swf/imgUpload.swf", "flashHolder", "100%", "100%", "10.0.0", false, flashvars, params, attributes, swfEmbeded);
		
		function swfEmbeded(e){
			if(e.success){
				mySWF = document.getElementById('flashHolder');
				mySWF.swfSelFile('a');
			}
		}

	</script>
</head>
<body style='background-color:#123456;margin:0px;padding:0px;'>
	<div id='mainHolder' style='position:absolute;width:100%;height:100%;'>
		<div id="flashHolder">
			<a href="http://www.adobe.com/go/getflashplayer">
				<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
			</a>
		</div>
	</div>
</body>
</html>

AS3:

Код AS3:
	flash.external.ExternalInterface.addCallback( "swfSelFile", swfSelFile );
function swfSelFile( msg ) {
   this.root.scaleX = 2;
}

Старый 23.10.2011, 18:44
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 2  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
RTFM

Код:
function thisMovie(movieName) {
         if (navigator.appName.indexOf("Microsoft") != -1) {
             return window[movieName];
         } else {
             return document[movieName];
         }
     }
     function sendToActionScript(value) {
         thisMovie("ExternalInterfaceExample").sendToActionScript(value);
     }

Старый 23.10.2011, 18:48
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 3  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
1.
Код:
mySWF = document.getElementById('flashHolder');
может быть недостаточно. Посмотрите, как нужно получать ссылку на объект во флешевой документации (см. класс ExternalInterface) см. выше

2. В момент вызова
Код:
mySWF.swfSelFile('a');
флеш скорее всего ещё не успел подписаться (ExternalInterface.addCallback)

Старый 23.10.2011, 18:48
ProxyGreen вне форума Посмотреть профиль Отправить личное сообщение для ProxyGreen Найти все сообщения от ProxyGreen
  № 4  
Ответить с цитированием
ProxyGreen
 
Аватар для ProxyGreen

Регистрация: Jul 2011
Сообщений: 67
Ну вы вызываете функцию swfSelFile() у mySWF, который является "ссылкой" на контейнер flashHolder в котором непонятно что вообще находится. Нужно у объекта swf-ки вызывать зарегистрированную функцию, нэ?

Старый 23.10.2011, 19:16
Gigatrop вне форума Посмотреть профиль Отправить личное сообщение для Gigatrop Найти все сообщения от Gigatrop
  № 5  
Ответить с цитированием
Gigatrop

Регистрация: May 2011
Сообщений: 25
andrew911, в вашем куске из документации есть movieName, это то же самое что ID ?

ProxyGreen,
Код AS3:
flash.external.ExternalInterface.addCallback( "swfSelFile", swfSelFile );
- это и регистрирует функцию-мост между JS и AS.
А контейнер flashHolder заменяется на мувик с таким же ID - выше в JS написан embedSWF, который это делает.

fljot, вызов достаточен, проверял через mySWF.width = '100';
Насчет "не успевает" - врятли, таймаут на 10 сек ставил.

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

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Цитата:
Сообщение от Gigatrop Посмотреть сообщение
А контейнер flashHolder заменяется на мувик с таким же ID - выше в JS написан embedSWF, который это делает.
Вот это врятли. Надо явно указать attributes.id = "flashHolder";

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

Регистрация: May 2011
Сообщений: 25
Файрбаг показывает что вместо контейнера становится объект с id, и явное указание бесполезно.

Добавлено через 8 минут
Это то что показывает флеш плеер (дебаг версия):

TypeError: Error #1010: Термин не определен и не имеет свойств.
at MethodInfo-327()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at flash.external::ExternalInterface$/_callIn()
at Function/<anonymous>()

Добавлено через 18 минут
Тема закрыта:
ExternalInterface.addCallback( 'myfun', myfun );
myfun была приватной, а должна быть публичной в классе, это моя ошибка в AS.

Спасибо за участие.

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от Gigatrop Посмотреть сообщение
Добавлено через 18 минут
Тема закрыта:
ExternalInterface.addCallback( 'myfun', myfun );
myfun была приватной, а должна быть публичной в классе, это моя ошибка в AS.
Ошибка ваша была в том, что вы пытались вызывать метод у.... <div>.
И при чем тут область видимости метода, тогда как он нужен исключительно внутри класса? В данном случае.

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

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

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


 


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


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