PDA

Просмотр полной версии : Вызов функций ActionScript из JavaScript


Sandor
09.09.2003, 00:31
:confused:
Нутром чую, что задаю очевидный вопрос, но всё-таки:
каким образом можно экспортировать из мувика функцию и поюзать ее из джаваскрипта?
Пока я додумался, только делать SetVariable, а в watch на нее делать то, что требуется, но что-то это уж очень криво...

Eprinter
09.09.2003, 02:15
На этом сайте есть урок (http://www.flasher.ru/tutorial/viewtut.php?id=5) от УильямБрэдберри, там все популярно расписано ;)

Sandor
09.09.2003, 23:43
Не, в эту-то сторону я понял - мне нужно наоборот AS-функции вызывать из JS. То есть у меня на странице есть flash-овый объект, и вот когда я нажимаю html-ную кнопку, я его показываю (ну, это из JS) и хочу вызвать его функцию (load-что-то-там). Пока единственный способ, которым я смог что-то подобное получить - это делать для мувика setVariable для передачи параметров и потом (вот изврат-то) setVariable для вызова watch на него (например, setVariable('initial_connect') и внутри на изменение этой переменной коннекчусь) - ну очень криво выходит :mad:

Sandor
10.09.2003, 18:29
Вот пара ссылок по теме:
http://www.xs4all.nl/~ppk/js/flash_call.html
http://www.darkbackward.com/flashMAC/MACtalk.zip - какой-то хитрый пример

Здесь http://macrofun.pvpers.com/archives/000035.html товарищ тоже предлагает

вызывать функции через setVariable (приятно, когда сам додумываешься до правильного решения),

однако не очень онятно как это он через одну переменную передает несколько параметров, так как

даже массивы передаются как одна строка.

По мотивам его исходников я пришел вот к чему:

JavaScript:


function CallFlash(function_name, parameters)
{
var movie = document.all('EditorMovie');
movie.setVariable('_root.function_params', parameters);
movie.setVariable('execute_function', function_name);
}


Flash:

this.watch("execute_function", ExecFunction);

function TestFunc(s, x)
{
_root.Log.text = 'In the test: S=' + s + ', X=' + x;
}


function ExecFunction(prop, oldval, newval, userData)
{
//eval(newval + '(' + _root.function_params + ')');
eval(newval)(_root.function_params);
_root.function_params = null;
}

Вот, в закомментированной строчке я ожидал, что eval работает как в JS, однако он только объекты

по имени возвращает. А то можено было бы сделать, скажем, CallFlash('TestFunc', '"Some Text",

117'); К сожалению распарсить строку по отдельным переменным, видимо, нельзя, а массивы

собираются точно в такую же строку.

Есть у кого-нибудь мысли по этому поводу?

Sandor
10.09.2003, 21:37
Попробую сформулировать-таки вопрос:

Как бы так передавать параметры из JS в AS одной строкой или еще какой структурой, так чтобы на стороне AS их разобрать можно было по переменным?