Вызов функции внешнего интерфейса флэш-интерфейса AS3 при загрузке страницы - PullRequest
2 голосов
/ 24 марта 2009

У меня есть функция, определенная в AS3, которая будет вызываться со стороны клиента через JavaScript. Функции AS3 просто печатают некоторое значение на экране SWF при его вызове.

Работает нормально, когда я устанавливаю обработчик события onclick для кнопки и вызываю функцию AS3. Однако я хочу вызвать эту функцию AS3, как только страница загрузится. Я использую jQuery в проекте и поместил вызов функции AS3 в $ (document) .ready (), но это дает мне следующую ошибку в FF2 firebug:

getFlashMovie ("my_movie_name"). My_as3_function не является функцией

Затем я попытался вызвать, установив обработчик события onLoad, но это также не работает - выдает ту же ошибку.

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

Ответы [ 8 ]

9 голосов
/ 24 марта 2009

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

Во вспышке:

ExternalInterface.call('flashReady');

На странице:

<script>
function flashReady() {
   ..
}
</script>
2 голосов
/ 31 марта 2009

Если вы используете swfObject для встраивания вашего SWF (вероятно, хорошая идея в любом случае), то вы можете использовать его функцию addDomLoadEvent (), которая позволяет вам что-то делать после полной загрузки SWF

swfobject.addDomLoadEvent(function() {
   $("#swfobject").get(0).inited('you are loaded!'); 
});
1 голос
/ 28 апреля 2009

Я не пытаюсь быть мудрым, но вы проверяете свою работу на сервере?

внешний интерфейс, доза addcallback не работает в локальной файловой системе, и, возможно, вам придется добавить:

flash.system.Security.allowDomain ( 'http://localhost');

если вы работаете на локальном компьютере.

: Р

0 голосов
/ 30 сентября 2010

Для завершения вам также придется использовать import flash.external.*;, чтобы все работало.

0 голосов
/ 10 апреля 2009

Ответы как твикта, так и Богдана жизнеспособны. Используйте метод tweakt, если у вас есть доступ к Actionscript. Используйте Богдана, если вы этого не сделаете. Я искал альтернативу помимо опроса (когда у вас нет доступа к ActionScript), но мне пока не удалось найти его. Здесь упоминаются события: http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html Но, похоже, никто не знает, как их использовать.

0 голосов
/ 31 марта 2009

Похоже, что набор ответов предлагает ответы, наиболее близкие к полному.

Как сказал Дэвид Ханак, к объекту flash нельзя получить доступ, поскольку он инициализируется, хотя я не согласен с тем, что мы должны полагаться на flashvars, хотя я люблю их.

Tweakt прав, но после вызова функции в javascript, вызовите функцию javascript, которая вызывает ваш swf; Таким образом, мы знаем, что вспышка готова, так как она отправила первый вызов.

0 голосов
/ 25 марта 2009

Я столкнулся с этой проблемой сам пару недель назад. Решение довольно простое:)

Во-первых, вам нужно добавить в DOM div

<div id="timewriter"><div>

Вы также будете использовать плагин jQuery Timers для определения времени загрузки. После этой подготовки все пойдет очень легко. Следующий фрагмент кода будет добавлен в ваш $ (document) .ready ();

var movie = getFlashMovie('my_movie_name');

if(movie.PercentLoaded() != 100)
{
    $("#timewriter").everyTime(100, function () 
    {
        if(movie.PercentLoaded() == 100)
        {

            $("#timewriter").stopTime();
            //the movie is loaded, call here your functions; usually this happens if you don't use cache

        }
    });
}
else
{
    //the movie is loaded, call here your functions; usually you get here if you use cache
}

Позднее редактирование: будьте осторожны, загрузка HTML-страницы не означает, что SWF-файл был загружен, что происходит сразу после завершения загрузки веб-страницы. Также мое решение основано на jQuery библиотеке JavaScript.

0 голосов
/ 24 марта 2009

Проблема в том, что объект Flash еще не инициализирован, когда страница завершает загрузку. Вероятно, было бы гораздо безопаснее выполнить эту инициализацию из AS3. Если вы хотите передать значения со страницы HTML, используйте flashVars.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...