Мастер-классы по Javascript, AJAX/COMET, jQuery Узнать больше...
Javascript.RU

Javascript <-> Flash мост

Эта статья описывает, как вызывать из Javascript методы Flash и наоборот.

Используя эти способы, javascript может получить доступ к буферу обмена ОС, хранимым объектам SharedObject, управлять flash-интерфейсами и многое другое.

Какой бы способ коммуникации мы не выбрали, для начала JS должен уметь находить объект Flash на странице.

Для того, чтобы все работало кроссбраузерно, Flash-ролик нужно вставить с использованием обоих тегов: object и embed, например так:

<object 
    id="BridgeMovie" width="400" height="200"        
    classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"   
 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
    <param name="movie" value="bridge.swf" />
    <param name="allowScriptAccess" value="sameDomain" />
    <embed
        src="/forum/bridge.swf" 
        name="BridgeMovie" align="middle"
        play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
        width="400" height="200" scale="exactfit" 
        type="application/x-shockwave-flash"
        pluginspage="http://www.macromedia.com/go/getflashplayer">
    </embed>
</object>

В этом примере существенны детали:

  1. Имя ролика BridgeMovie дублируется как object.id и embed.name.
  2. Путь к ролику bridge.swf дублируется в object/embed
  3. Параметр allowScriptAccess="sameDomain"
  4. Дублируются размеры ролика

Теперь объект ролика можно получить из window["BridgeMovie"] для IE или document["BridgeMovie"] в остальных браузерах:

function getMovie() {
    var M$ =  navigator.appName.indexOf("Microsoft")!=-1
    return (M$ ? window : document)["BridgeMovie"]
}

Далее мы разберем средства для коммуникации с этим роликом.

Самый древний, знакомый большинству флешеров способ - это вызов javascript-функции посредством getURL с протоколом javascript:

getURL('javascript:функция("параметры");');
  • Работает во всех броузерах
  • Flash 5 и выше
  • Прост в применении
  • Не возвращает результат
  • Длина передаваемой строки ограничена 508 символами.

Вызов осуществляется так:

fsCommand("функция", "параметры")

Чтобы принять этот вызов, в Javascript должна быть специальная обвязка.

Редактор Macromedia Flash может генерировать ее автоматически при публикации ролика.

Для этого нужно в Publish Settings:

  1. Во вкладке Formats включить публикацию html-файла
  2. Во вкладке HTML выбрать Template: Flash with FSCommand

Генерируемый шаблон javascript-обвязки состоит из двух частей: функция обработки и дополнительного кода для IE.

Название функции имеет вид <ИмяРолика>_DoFSCommand. В нашем случае это BridgeMovie_DoFSCommand

Первый аргумент - имя вызываемой функции, второй - строка аргументов.
Простейший вариант выглядит так:

function BridgeMovie_DoFSCommand(command, args) {
    // вызвать функцию command с аргументом args
    window[command].call(null, args)
}

Вызов, например, функции show из Flash приведет к цепочке вызовов:

  1. (Flash) fsCommand("show","something")
  2. (JS) BridgeMovie_DoFSCommand("show","something")
  3. (JS) show("something")

Этот код нужен только для IE под Windows, в дополнение к BridgeMovie_DoFSCommand, так как в этом браузере fsCommand вызывает не Javascript, а VBScript.

if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 
&& navigator.userAgent.indexOf("Windows") != -1) {
        document.write('<script language=\"VBScript\"\>\n');
        document.write('On Error Resume Next\n');
        document.write('Sub BridgeMovie_FSCommand(ByVal command, ByVal args)\n');
        document.write('        Call BridgeMovie_DoFSCommand(command, args)\n');
        document.write('End Sub\n');
        document.write('</script\>\n');
}

Здесь VBScript просто передает вызов Javascript'у.

Итак, плюсы и минусы метода fscommand:

  • Flash 5 и выше
  • Не работает под Mac OS
  • Не возвращает результат
  • Нужен дополнительный JS-код

Этот способ работает, начиная с Flash 8. В отличие от всех предыдущих способов, он не только вызывает javascript, но и передает обратно возвращаемое значение, по возможности сохраняя его тип.

import flash.external.ExternalInterface;
var result = ExternalInterface.call("func", "param1", "param2", ...);

К сожалению, начиная с Flash 8, где он впервые появился, в ExternalInterface нашли большое количество разнообразных багов. Глюки сериализации, самопроизвольное изменение передаваемых данных и т.п.

Эти ошибки поправлены в новейших версиях Flash Player, но многие продолжают использовать более старые редакции Flash 8,9.

Актуальную информацию об ошибках можно получить из google, набрав "ExternalInterface bug".

  • Простота
  • Возвращает результат
  • Разнообразные баги, в отличие от предыдущих способов

Самый простой способ - установка переменной ролику:

getMovie().SetVariable("message","data")

Обратите внимание - именно SetVariable, не setVariable. Регистр здесь важен.

Чтобы Flash получил значение - можно проверять сообщения, например, на каждом кадре. Это около 12 раз в секунду.

Следующий код срабатывает на каждом кадре и ждет появления значения переменной message.

var message = null
_root.onEnterFrame = function() {
	if (message!==null)	{
		_root.txtRecieve.text = message // получили сообщение
		message = null
	}
}
  • Простота и надежность
  • Кросс-браузерность, Flash 5+
  • Дорога в одну сторону, не больше одного сообщения за кадр.

Применив ExternalInterface из Flash8+, можно объявить флеш-метод, который будет обрабатывать вызовы из javascript.

Формат вызова:

ExternalInterface.addCallback(функция JS, объект Flash, функция Flash);.

Например, следующий код устанавливает глобальную функцию recieveFromJS как обработчик JS-вызова sendFromJS.

import flash.external.ExternalInterface;
...

ExternalInterface.addCallback("sendFromJS", null, recieveFromJS);

function recieveFromJS(msg) {
	_root.txtRecieve.text = msg;
}

В JS достаточно сделать простой вызов:

getMovie().sendFromJS(value);
  • Можно тут же получить значение из Flash
  • Множество багов в ExternalInterface.

Можно также использовать LocalConnection, как это сделано во Flash-Javascript Integration Kit.

Этот пример пересылает текст из верхнего JS-поля направо во Flash, из нижнего Flash-поля - налево в JS.

Вводите любой, текст и жмите кнопку для пересылки нужным методом.

Послать из JS во Flash:
->
<-
// Flash Storage example

import flash.external.ExternalInterface;

ExternalInterface.addCallback("sendFromJS", null, recieveFromJS);

function recieveFromJS(msg) {
	_root.txtRecieve.text = msg;
}


_root.button.onRelease = function() {
	fscommand("recieveFromFlash", _root.txtSend.text);
}

_root.button2.onRelease = function() {
	ExternalInterface.call("recieveFromFlash", _root.txtSend.text);
}

_root.button3.onRelease = function() {
	var txt = _root.txtSend.text.split('"').join('\\"')
	getURL('javascript:recieveFromFlash("'+txt+'");');
}

var message = null

_root.onEnterFrame = function() {
	if (message!==null)	{
		_root.txtRecieve.text = message
		message = null
	}
}

Скачать .fla - исходник флешки.

function recieveFromFlash(Txt) {
        document.getElementById('txtRecieve').value = Txt;
}

function getMovie() {
        var M$ =  navigator.appName.indexOf("Microsoft")!=-1
        return (M$ ? window : document)["BridgeMovie"]
}


function sendSetVariable() {
        var value = document.getElementById('txtSend').value

        var movie = getMovie()
        movie.SetVariable("message", value)
}


function sendExternalInterface() {
        var value = document.getElementById('txtSend').value

        var movie = getMovie()

        movie.sendFromJS(value);
}

/* movie name_DoFSCommand */
function BridgeMovie_DoFSCommand(command, args) {
        window[command].call(null, args)
}


// Hook for Internet Explorer.
if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && 
navigator.userAgent.indexOf("Windows") != -1) {
        document.write('<script language=\"VBScript\"\>\n');
        document.write('On Error Resume Next\n');
        document.write('Sub BridgeMovie_FSCommand(ByVal command, ByVal args)\n');
        document.write('        Call BridgeMovie_DoFSCommand(command, args)\n');
        document.write('End Sub\n');
        document.write('</script\>\n');
}

По просьбам читателей - примеры и исходники вынесены на отдельную страницу.

Успешной интеграции!


Автор: volksdesign, дата: 22 мая, 2008 - 16:38
#permalink

Здравствуйте меня интересует маленький вопросик по поводу вот Этого кода

function getMovie() {
    var M$ =  navigator.appName.indexOf("Microsoft")!=-1
    return (M$ ? window : document)["BridgeMovie"]
}

При Вставке Flash в форму данное обращение необрабатывается в Explorer!!!

<form name="test" id="1">
<object 
    id="BridgeMovie" width="400" height="200"        
    classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"  
  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
    <param name="movie" value="bridge.swf" />
    <param name="allowScriptAccess" value="sameDomain" />
    <embed
        src="/forum/bridge.swf" 
        name="BridgeMovie" align="middle"
        play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
        width="400" height="200" scale="exactfit" 
        type="application/x-shockwave-flash"
        pluginspage="http://www.macromedia.com/go/getflashplayer">
    </embed>
</object>
</form>

Если у вас будет время помогите решить данную сетуацию!!!


Автор: Илья Кантор, дата: 2 августа, 2008 - 14:02
#permalink

Честно - вопрос нихрена не понял. Какое обращение не обрабатывается и что при этом выдает.

Попробуйте примеры на отдельных страницах.


Автор: Евгений Колосов (не зарегистрирован), дата: 31 мая, 2008 - 12:10
#permalink

Большое спасибо за такие наглядные примеры - Ваш сайт, наверное, лучший путеводитель по JS в рунете. По крайней мере, мне, гуманитарию, все понятно!


Автор: Rodriguez, дата: 4 июня, 2008 - 10:31
#permalink

Добрый день.

Вы не могли мне подсказать:
getURL('javascript:функция("параметры");');
Не отрабатывается в последней версии флэша. Т.е. вообще не происходит ни каких событий. Вызов функции не осуществляется. Когда стояла версия 8,0,22,0 все отрабатывалось.

К примеру, на нажатие на кнопку во флэше вешаем getURL('javascript:alert('test');');

А алерт вызывался когда стояла версия 8,0,22,0. Но стоило обновить до последней, то перестал. Может ктонибудь сталкивался с подобной проблемой? Или возможно после обновления какието настройки безопасности флэша поменялись?

Заранее благодарю!


Автор: Ajaxy (не зарегистрирован), дата: 30 июня, 2008 - 23:23
#permalink

ну если так кавычки ставить, то не будет работать
если это частная опечатка, тогда не знаю..


Автор: Tomas (не зарегистрирован), дата: 5 июня, 2008 - 18:18
#permalink

Огромное спасибо за этот пример, уже как год хотел научиться делать такой мост. Раньше просто не получалось, потом вообще забил, а теперь умею
Big thanks


Автор: читатель (не зарегистрирован), дата: 13 июня, 2008 - 19:05
#permalink

Спасибо за детальное описание. Действительно понятно даже начинающему.


Автор: Ajaxy (не зарегистрирован), дата: 30 июня, 2008 - 23:26
#permalink

Здравствуйте.
Прекрасная статья, спасибо!
одно замечание - MSIE 7.0 осуществляет доступ к объекту так же через объект document, вместо объекта window.


Автор: Mr. DEE (не зарегистрирован), дата: 26 июля, 2008 - 21:58
#permalink

Странно, но на локальной машине у меня не заработал ни один из ваших способов, флэш плеер 10 Sad
Очень нужно решение и я его так и не нашел. Настройки безопасности вроде сделал...


Автор: Илья Кантор, дата: 28 июля, 2008 - 12:50
#permalink

Без информации о том, какая машина (ОС, браузер), и что именно не заработало - посоветовать ничего нельзя..


Автор: Валерий (не зарегистрирован), дата: 21 апреля, 2009 - 23:42
#permalink

Я тоже на локальной машине (запуская HTML минуя сервер) не могу получить вызов JS, а надо именно на локальной. OS WinXP Firefox 3.08


Автор: Валерий (не зарегистрирован), дата: 22 апреля, 2009 - 00:00
#permalink

Сам нашел ответ. При вызове плейера нужно использовать параметр 'allowScriptAccess','always'


Автор: Berds (не зарегистрирован), дата: 24 сентября, 2009 - 22:45
#permalink

Ты лучший. Я пару часов потратил на поиски ответа и вот он !!! Все работает и на локальном компьютере.


Автор: Константин (не зарегистрирован), дата: 2 августа, 2008 - 08:56
#permalink

Здравствуйте!

Читал, что метод SetVariable не работает для OS Mac,
а ExternalInterface работает - правда ли это?

Пробовал делать пересылку из js - flash методом ExternalInterface (OS Windows XP, Flash 8, IE7) - не работает, в чем может быть дело?

Вы пишете, что Flash 8 устарел - а какие не устарели и где их можно скачать?
Было бы неплохо, если бы выложили исходник тестовой страницы целиком,
а также флэш-исходник для Flash 8.
Буду благодарен за ответы на мои вопросы.Всго хорошего


Автор: Илья Кантор, дата: 2 августа, 2008 - 13:47
#permalink

Исходники и примеры выложены, см. конец статьи. То, что Вы слышали про Mac OS, имхо не верно, но все же попросите маковода тестануть


Автор: Константин (не зарегистрирован), дата: 2 августа, 2008 - 14:43
#permalink

Благодарю за ответ, однако скачал с выложенных примеров исходники bridge.fla, example2.fla - во Flash 8 они не открываются, пишет "unexpected file format" Можно ли их сохранить в Flash 8, будет ли в этом флэше работать пересылка?


Автор: Илья Кантор, дата: 2 августа, 2008 - 18:52
#permalink

Откройте их в более старшей версии флеш и сохраните в формате Flash8


Автор: Алексей (не зарегистрирован), дата: 5 сентября, 2008 - 14:02
#permalink

интересная особенность проявилась:
у меня есть некая флешка на странице. она лежит в блоке div. у этого div'a стоит свойство visibility в значение hidden

чего я хочу:
1. флешка загрузилась
2. Внутри флешки обрабатывается команда о завершении загрузки этой флешки
3. Эта команда вызывает функцию на страничке, которая ставит visibility блока div в значение visible.
4. Флешку (и все, что в этом блоке помимо нее) видно, все радуются

что получается сейчас:
1. Флешка загрузилась
2. Событие не отработалось

Судя по тому, что функция вызывается, когда блок div имеет visibility: visible, у меня возникают подозрения, что действия флешки игнорируются из-за этого свойства (мол, не видно слой, значит и работать ему нельзя).

Вопрос, я прав в своих домыслах? Если да, то каким способом я могу вызвать из флешки метод джаваскрипта?
Добавление флешки на страницу идет через swfObject


Автор: Илья Кантор, дата: 11 ноября, 2008 - 01:58
#permalink

Не знаю насчет visible, но с display:none такое видел. Если флешка не видна, то она не работает, и событие прислать не может.


Автор: SandZ, дата: 17 февраля, 2010 - 12:34
#permalink

Можно див з-индексом опутить под страницу, а когда понадобится - поднять


Автор: Скрипт (не зарегистрирован), дата: 30 октября, 2008 - 21:53
#permalink

Раньше знал только как из flash вызывать функции javascript, а теперь знаю и то и то , благодаря этой статье
Ух, теперь я напишу то что хотел


Автор: m4d (не зарегистрирован), дата: 11 ноября, 2008 - 01:40
#permalink

Здравствуйте, а можно ли вытащить переменную из flash без изменения swf'ки?
Например, есть готовый swf-объект на странице, из него нужно взять переменную txtField. Если честно - нужно это сделать на чужой странице:) С хтмлом могу делать что угодно, но флэшки ни местонахождение, ни параметры, ни тем более код менять нельзя. Посоветуете?


Автор: Добарин Сергей (не зарегистрирован), дата: 11 декабря, 2008 - 23:49
#permalink

Немного не ясно что Вы имеете в виду.
Возможность считывать динамически переменную флешки либо просто добраться до хранимого в ней значения?
То есть интересует Вас контент переменной или возможность скажем подгребать ее значение тем же джаваскриптом например?

Например можно попробовать следующее:
1. Создаем новый флеш проэкт.
2. Создаем там загрузчик и загружем в него интересующую нас флешку.
3. обходим в циклах все уровни загруженной флешки и выводим все переменные и их значения. Находим нужную и путь к ней.
4. В исходном проэкте создаем функцию которая считывает конкретно нужную нам переменную в нужное время, либо подписываемся на ее изменение.
5. Выводим полученное значение в куда нам уже нужно, в тот же самый джаваскрипт.
6. Получаем новую флешку, которая все что делает это загружает в себя нужную нам, вытаскивает из нее значение переменной и отправляет его дальше.


Автор: Download YouTube Video (не зарегистрирован), дата: 5 января, 2009 - 23:23
#permalink

Спасибо! Сегодня целий день в нете рисчил - один спам нашел, а здесь все четко и ясно. Thanks =)


Автор: Руслан (не зарегистрирован), дата: 3 февраля, 2009 - 15:50
#permalink

Статья супер, но у меня очень смешная ситуация: Сделал как все сказали, вызываю js функцию через ExternalInterface, ни в одном браузере не работает... НО!!! Представьте себе работает в лисе в IE TAB (мож кто не знает это плагин к лисе такой, он отображает страницу как это делает IE), в самом IE НЕ пашет а в лисе в IE TAB пашет!!!

Че за фигня?....

если кто знает что делать, напишите плз. очень надо на: code_master@mail.ru

p.s. Спасибо за ОТЛИЧНУЮ СТАТЬЮ!!!


Автор: Руслан (не зарегистрирован), дата: 4 февраля, 2009 - 10:52
#permalink

Виноват, извиняюсь, тестировал на локальном компе, поэтому и пахало, вылил на удаленный сервер, все заработало


Автор: blink183 (не зарегистрирован), дата: 8 февраля, 2009 - 18:38
#permalink

СУПЕР просто! всё понятно... мне очень помогло!!!!!


Автор: Кирилл (не зарегистрирован), дата: 18 февраля, 2009 - 02:28
#permalink

Здравствуйте. Не могли бы Вы сами сохранить файл example.fla из
Демка приема-передачи через ExternalInterface
чтобы он открывался в Flash 8, т.к. у меня да и у многих пользователей, я думаю, нет возможности найти старший плеер...


Автор: Илья Кантор, дата: 23 апреля, 2009 - 09:45
#permalink

Вы можете легко получить плеер самой последней версии здесь: http://get.adobe.com/flashplayer/


Автор: Кирилл (не зарегистрирован), дата: 18 февраля, 2009 - 02:43
#permalink

ExternalInterface
К сожалению, начиная с Flash 8, где он впервые появился, в ExternalInterface нашли большое количество разнообразных багов. Глюки сериализации, самопроизвольное изменение передаваемых данных и т.п.
Эти ошибки поправлены в новейших версиях Flash Player, но многие продолжают использовать более старые редакции Flash 8,9

Всвязи с этим вопрос... Здесь имеется ввиду версия самого плеера, или компилятора (ПО в котором создавался FLA, затем SWF файл)?


Автор: Илья Кантор, дата: 23 апреля, 2009 - 09:43
#permalink

Имеется в виду версия самого плеера.


Автор: Гость (не зарегистрирован), дата: 24 февраля, 2009 - 16:04
#permalink

Огромное спасибо за статью.
Четко и в полной мере. Почаще бы такие подсказки попадались!


Автор: Алексей эС Вэ (не зарегистрирован), дата: 14 мая, 2009 - 16:58
#permalink

Огромное спасибо, просто блеск!


Автор: Гость (не зарегистрирован), дата: 27 мая, 2009 - 20:23
#permalink

описанный пример работает в IE, но запустить его в OPERA не получилось. Броузер просто не видит объект. То есть не работает ссылка ни window["objectname"] ни document["objectname"]. Кто нибудь может указать в каком направлении копать?


Автор: Илья Кантор, дата: 27 мая, 2009 - 20:36
#permalink

Opera, случайно, не под Linux ?


Автор: Гость (не зарегистрирован), дата: 27 мая, 2009 - 22:36
#permalink

Opera 9.51 под winXP AC 3.6.0


Автор: Dimon41 (не зарегистрирован), дата: 17 июня, 2009 - 16:40
#permalink

Материал супер , но не подскажете как изменить функцыю

function getMovie() {
var M$ = navigator.appName.indexOf("Microsoft")!=-1
return (M$ ? window : document)["BridgeMovie"]
}

чтоб она работала с неопределеным именем ролика на пример getMovie(movie);
где movie это переменая


Автор: Илья Кантор, дата: 18 июня, 2009 - 00:29
#permalink
function getMovie(movie) {
var M$ = navigator.appName.indexOf("Microsoft")!=-1
return (M$ ? window : document)[movie]
}

?


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2009 - 10:28
#permalink

+стопитьсот


Автор: AZM.SU (не зарегистрирован), дата: 4 августа, 2009 - 00:00
#permalink
getMovie().SetVariable("_root.message","data");
getMovie().TCallLabel('_root','kadr');

позволит выполнить код в кадре "kadr" вместо того, что бы крутить
if (message!==null){ ... }
Причём кадр этот может лежать в отдельной сцене, где первы кадр содержит
stop();
а второй "kadr" - обработчик на приход данных и данные будут обработаны незамедлительно.


Автор: Гость (не зарегистрирован), дата: 30 сентября, 2009 - 22:30
#permalink

день добрый
можете подсказать

я вставлю невидимый флеш
из Javascript передам значение во Flash
а из флешевского callbacka вызову функцию Javascript
эта функция отработает нормально ?


Автор: Zinusya (не зарегистрирован), дата: 26 октября, 2009 - 18:50
#permalink

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


Автор: Гость (не зарегистрирован), дата: 13 февраля, 2010 - 17:00
#permalink

Пример из жизни - процессор звуковых сигналов для вэб месенджера.


Автор: Marabo (не зарегистрирован), дата: 19 ноября, 2009 - 14:44
#permalink

Автору статьи РЕСПЕКТ!!!


Автор: Максимка (не зарегистрирован), дата: 26 декабря, 2009 - 17:18
#permalink

Спасибо за статью!
Однако столкнулся с одной проблемой - использую ExternalInterface, скрипт работает только в том случае, если его прописать в первом кадре. Мне это не удобно, т.к. в первых кадрах расположен загрузчик, а данные загружаются из ХМЛя посже. Точнее, мне бы хотелось прописать экшн к кнопкам внутри мувиклипов (в первом кадре я еще не знаю их путей). Как можно это решить?

АС2, инклюд в первод кадре естественно.


Автор: KIL (не зарегистрирован), дата: 19 января, 2010 - 21:23
#permalink

Столкнулся с проблемой такого характера:
Хотел сделать чтоб при просматривании видео посетитель нажимал на проиграть ролик (на flv player-е) и при этом чтоб выскакивала реклама.
Помогите как это организовать?


Автор: Гноргий (не зарегистрирован), дата: 25 марта, 2010 - 19:21
#permalink

ребят подскажите пожалуйста, а как должен выглядеть еод для файла .swf


Автор: Вадим В. (не зарегистрирован), дата: 2 апреля, 2010 - 16:44
#permalink

Подскажите, пожалуйста:
Есть флеш объект, получив задание он отправляет его на сервер, после обработки задания сервер присылает флеш-объекту результат и тот выдаёт текст с результатом. Текст можно копировать и т.п.

Как можно перехватить текст результата от сервера (или прямо из флешобъекта) чтобы оперировать им.


Автор: Lob1AV (не зарегистрирован), дата: 20 апреля, 2010 - 13:44
#permalink

Извиняюсь за нубский вопрос, но как мне остановить/проиграть flash'ку с помощью javascript?


Автор: Lob1AV (не зарегистрирован), дата: 20 апреля, 2010 - 18:58
#permalink

Вопрос снят.
Решение:
Воспризвести: document.getElementById(obj).Play();
Остановить: document.getElementById(obj).StopPlay();
где obj - это id контейнера, при использовании динамеческого swfobject.
Источник: http://www.belonogov.ru/wrote/texts/fscommander/


Автор: Гость (не зарегистрирован), дата: 7 мая, 2010 - 12:40
#permalink

Превосходно! Великолепно) Думал придется долго искать и думать, а решение быстро нашлось, спасибо за статью)


Автор: Гость (не зарегистрирован), дата: 24 августа, 2010 - 13:17
#permalink

афтор молодца!!! зачотец!!!


Автор: Гость (не зарегистрирован), дата: 24 августа, 2010 - 16:40
#permalink

в 10 флеше юзаю экстернал интерфейс
багов не вижу пока. наверно в 10 уже исправлено в отличие от 8 про который афтор говорит


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
12 + 5 =
Введите результат. Например, для 1+3, введите 4.
 
Новости

Открылась регистрация на мастер-классы по профессиональному Javascript, AJAX/COMET, jQuery в городах:

  • Ярославль (24-25 сентября)
  • Новосибирск (3-4 октября)
  • Казань (9-10 октября)
  • Минск (16-17 октября)
  • Днепропетровск (23-24 октября)
  • Одесса (30-31 октября)
  • Самара (13-14 ноября)

Более подробно - на странице мастер-классов.

Если вас интересует другой город - посмотрите здесь, выбрав "Другие города".

Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Статьи и мероприятия

Будьте в курсе наших последних новостей!

Последние обсуждения на форуме
Forum
Последние комментарии