Просмотр полной версии : Вызов из JavaScript вшитого во флешку -> функции ActionScript
AzagThoth
24.06.2011, 20:30
Здравствуйте.
Столкнулся с такой проблемой - не знаю как вызвать функцию AS из кода на JavaScript вшитого во флешку.
Опишу подробнее. Допустим есть флешка. В ней пять ключевых кадров. В первом кадре написано:
this.stop();
getURL("javascript: alert('Hello World')");
Если откроем в браузере то всё замечательно отработает и увидим алерт от JavaScript.
Теперь допустим мне надо перейти на третий кадр. Что тогда я должен написать в коде вызова getURL("javascript: xxxxxx")
Разумеется сама задача вообще другая и гораздо объёмистей. Мне нужно сам принцип понять вызова из встроенного флешку кода на JavaScript конструкций и функций ActionScript.
Добавлено через 2 часа 14 минут
Большая просьба. Если вдруг знаете как это сделать, но лень писать - просто направьте меня. Например почитать про ExternalInterface и подобное. Уже очень много инфы перечитал на эту тему и пока вообще 0 идей. Дело в том, что все примеры в интернете описывают когда ролик зашит в html страницу и у него есть некое имя, то через это имя с ним и работают. Тут же ситуация, что ролик может играть в браузере как просто swf файл. Может конечно и быть на html-странице но с не объявленным именем или любым произвольным именем. То есть вопрос стоит именно в том, как управлять неименованным роликом через JavaScript вшитого в код ActionScript. Или же выскажите своё мнение если считаете что это невозможно.
AzagThoth
24.06.2011, 23:13
Ну через него же можно получать переданные переменные из JavaScript.
Вот здесь об этом тема:
http://www.flasher.ru/forum/showthread.php?t=120517 (Правда тут про AS3 и ролик вшит в html страницу как я понял)
Мне бы и переданных переменных хватило, там бы я разобрался что с ними делать.
Ну можно и не через getURL вызывать JavaScript. Так например:
import flash.external.ExternalInterface;
ExternalInterface.call('function merf() { alert("Hello world"); }');
Вот как только из вызванного JavaScript обратиться к функциям Flash ума не приложу :(
AzagThoth, вам нужна обратная связь. Тот же ExternalInterface, только попробовать нужно метод addCallback. Правда не уверен, что этот фокус сработает, но попробовать можно.
Только не понимаю, почему бы вам сразу не вызвать нужную функцию во флешке, минуя посредничество JS ?
AzagThoth
24.06.2011, 23:51
Да долго объяснять, но именно так нужно. И потом это использовать активно планирую в других задачах.
На сколько я понял addCallback работает только если в теле html документа есть блок с JavaScript и ролик вызывается через html страницу и имеет имя идентификатор, что бы к нему обращаться из вне по JavaScript.
Добавлено через 32 минуты
Просто у меня в JS будут некие условия, и в зависимости от этих условий. Я планирую те или иные функции ActionScript вызывать.
На сколько я понял addCallback работает только если в теле html документа есть блок с JavaScript и ролик вызывается через html страницу и имеет имя идентификатор, что бы к нему обращаться из вне по JavaScript.
Предполагается, что мы не знаем id контейнера, где расположена флешка?
Внутри флешки мы можем попробовать его узнать.
А вот как объявить из флешки JS-метод, доступный для addCallback в неё же, мне не понятно, это надо JS копнуть.
Добавлено через 3 минуты
Просто у меня в 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 контейнера увидеть не удалось.
id может и не быть, если он не задан (как в случае "загрузиться напрямую"), но ссылку на сам объект в DOM попробовать получить можно. Это и нужно.
AzagThoth
25.06.2011, 01:00
Да, большое спасибо. Очень логично. Полагаю что дальше уже разберусь! Большое спасибо за ценный совет.
Разберетесь - отпишитесь :)
PS>
import flash.external.*;
ExternalInterface.call('alert(this)');
Но как дальше?
AzagThoth
25.06.2011, 01:18
Обязательно отпишусь как разберусь, пока что ковыряю DOM JS, обхожу форами все дочерние свойства this - пытаюсь понять в каком оно может хранить объект flash отображаемый на странице. В общем сейчас уже по большему счёту думаю дело техники. Как только решится выложу получившееся решение.
Так, если я верно понял, вам нужно прямо из флешки сделать такой вызов, который бы учел конетейнер с нею. ExternalInterface.call('alert(this)') , насколько я понял, и будет выводить в окно алерта эту ссылку - [object Window] . Т.е. нужно попробовать использовать this (this яваскриптовский) в вызове call.
(См. мой предыдущий пост.)
Нет, ошибаюсь я, похоже. Этот [object Window] не то. :(
Ссылка должна быть [object HTMLObjectElement] .
А зачем вам из флэшки выносить обработку в яваскрипт?
AzagThoth
25.06.2011, 14:47
Эх. Перепробовал всё возможное и невозможное. Похоже что это невозможно в принципе. Увы :(
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.