Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вызов из JavaScript вшитого во флешку -> функции ActionScript (http://www.flasher.ru/forum/showthread.php?t=158893)

AzagThoth 24.06.2011 20:30

Вызов из JavaScript вшитого во флешку -> функции ActionScript
 
Здравствуйте.

Столкнулся с такой проблемой - не знаю как вызвать функцию AS из кода на JavaScript вшитого во флешку.
Опишу подробнее. Допустим есть флешка. В ней пять ключевых кадров. В первом кадре написано:
Код AS1/AS2:

this.stop();
getURL("javascript: alert('Hello World')");

Если откроем в браузере то всё замечательно отработает и увидим алерт от JavaScript.
Теперь допустим мне надо перейти на третий кадр. Что тогда я должен написать в коде вызова getURL("javascript: xxxxxx")

Разумеется сама задача вообще другая и гораздо объёмистей. Мне нужно сам принцип понять вызова из встроенного флешку кода на JavaScript конструкций и функций ActionScript.

Добавлено через 2 часа 14 минут
Большая просьба. Если вдруг знаете как это сделать, но лень писать - просто направьте меня. Например почитать про ExternalInterface и подобное. Уже очень много инфы перечитал на эту тему и пока вообще 0 идей. Дело в том, что все примеры в интернете описывают когда ролик зашит в html страницу и у него есть некое имя, то через это имя с ним и работают. Тут же ситуация, что ролик может играть в браузере как просто swf файл. Может конечно и быть на html-странице но с не объявленным именем или любым произвольным именем. То есть вопрос стоит именно в том, как управлять неименованным роликом через JavaScript вшитого в код ActionScript. Или же выскажите своё мнение если считаете что это невозможно.

wvxvw 24.06.2011 23:02

ExternalInterface?

AzagThoth 24.06.2011 23:13

Ну через него же можно получать переданные переменные из JavaScript.
Вот здесь об этом тема:
http://www.flasher.ru/forum/showthread.php?t=120517 (Правда тут про AS3 и ролик вшит в html страницу как я понял)
Мне бы и переданных переменных хватило, там бы я разобрался что с ними делать.

Ну можно и не через getURL вызывать JavaScript. Так например:
Код AS1/AS2:

import flash.external.ExternalInterface;
ExternalInterface.call('function merf() { alert("Hello world"); }');

Вот как только из вызванного JavaScript обратиться к функциям Flash ума не приложу :(

mooncar 24.06.2011 23:41

AzagThoth, вам нужна обратная связь. Тот же ExternalInterface, только попробовать нужно метод addCallback. Правда не уверен, что этот фокус сработает, но попробовать можно.

Только не понимаю, почему бы вам сразу не вызвать нужную функцию во флешке, минуя посредничество JS ?

AzagThoth 24.06.2011 23:51

Да долго объяснять, но именно так нужно. И потом это использовать активно планирую в других задачах.
На сколько я понял addCallback работает только если в теле html документа есть блок с JavaScript и ролик вызывается через html страницу и имеет имя идентификатор, что бы к нему обращаться из вне по JavaScript.

Добавлено через 32 минуты
Просто у меня в JS будут некие условия, и в зависимости от этих условий. Я планирую те или иные функции ActionScript вызывать.

mooncar 25.06.2011 00:28

Цитата:

Сообщение от AzagThoth (Сообщение 1006350)
На сколько я понял addCallback работает только если в теле html документа есть блок с JavaScript и ролик вызывается через html страницу и имеет имя идентификатор, что бы к нему обращаться из вне по JavaScript.

Предполагается, что мы не знаем id контейнера, где расположена флешка?
Внутри флешки мы можем попробовать его узнать.
А вот как объявить из флешки JS-метод, доступный для addCallback в неё же, мне не понятно, это надо JS копнуть.

Добавлено через 3 минуты
Цитата:

Сообщение от AzagThoth (Сообщение 1006350)
Просто у меня в JS будут некие условия, и в зависимости от этих условий. Я планирую те или иные функции ActionScript вызывать.

Так запишите заранее в JS комплексную функцию, которая бы и учитывала ваши условия, а при вызове с помощью call из флешки принимала бы от нее еще и какие-то параметры.

В общем, все расплывчато, условия задачки неясны.

AzagThoth 25.06.2011 00:34

В том то и дело что мы не знаем id контейнера куда загружена флешка. Его может и не быть вовсе. Флешка может просто напрямую загрузиться как http://mysite.ru/nasha_fleshka.swf (т.е. просто как swf файл). На самом деле мне уже в глубине души кажется что это в принципе не возможно сделать. Но ой как же хочется :)

Добавлено через 2 минуты
Ну я же попробовал максимально упростить в первом посте. Просто средствами JS функции описанной внутри флешки, перейти на третий кадр например. Если сделать это то дальше всё само разрешится. Станет понятно как вызывать функции AS из вшитого JS, а дальше уже дело техники.

Добавлено через 5 минут
А как попробовать узнать id контейнера внутри флешки? Я пробовал пройтись for(var i in this) но ни какой инфы там об id контейнера увидеть не удалось.

mooncar 25.06.2011 00:44

id может и не быть, если он не задан (как в случае "загрузиться напрямую"), но ссылку на сам объект в DOM попробовать получить можно. Это и нужно.

AzagThoth 25.06.2011 01:00

Да, большое спасибо. Очень логично. Полагаю что дальше уже разберусь! Большое спасибо за ценный совет.

mooncar 25.06.2011 01:06

Разберетесь - отпишитесь :)

PS>
Код AS1/AS2:

import  flash.external.*;
ExternalInterface.call('alert(this)');

Но как дальше?


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

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