Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   uncaught exception при вызове ExternalInterface callback (http://www.flasher.ru/forum/showthread.php?t=144065)

Kubik129 01.09.2010 19:45

uncaught exception при вызове ExternalInterface callback
 
Приветы всем.
Ситуация следующая: хочется организовать вызов функции Actionscript из javascript'a. Для этого использую класс ExternalInterface и его метод addCallback, как описано например здесь.
Тестовый пример сделал как описано в этом примере. И все нормально работает.
Трудности начались при попытке использовать эту схему в конечном проекте. Код хтмл страниц генерируется на стороне сервера пхпешными скриптами и выдается клиенту уже в готовом виде. Для работы с клиентской частью используется prototype.js фреймворк.
На страницу помещаем флешку, которая будет принимать сигналы от javascript'a и выполнять нужные нам действия. Делаю все тоже самое как в примере, во флешке прописываю addCallback'и, цепляю объекты flash и вызываю функции этих flash объектов, которые были объявлены в addCallback. И получаю такую ошибку:
uncaught exception: Error in Actionscript. Use a try/catch block to find error.
попытка насовать try/catch внутрь actionscript'a ничего не дает, валится гораздо раньше, на попытке вызвать функцию, а не от неправильной работы самой функции.

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

alatar 02.09.2010 11:10

Что говорит ExternalInterface.available?

Kubik129 02.09.2010 11:55

ExternalInterface.available говорит true, я вообще использую вот такую конструкцию чтобы определить callback'и:
Код AS3:

if (ExternalInterface.available) {
  try {
    ExternalInterface.addCallback("myFunction", myFunction);
    textField.text = "addcallback done";
  } catch (e) {
    textField.text = e;
  }
}

ну и получаю addcallback done

alatar 02.09.2010 12:21

И когда возникает ошибка? При попытке вызвать функцию myFunction из JavaScript?

Kubik129 02.09.2010 12:47

Да, ошибка возникает при вызове функции myFunction в javascript

alatar 02.09.2010 12:57

что в функции? Попробуйте поставить прерывание в самом начале функции, что бы точно определить момент возникновения ошибки. Возникает ли ошибка, если функция пустая?

Kubik129 02.09.2010 13:03

хм, мысль интересная, сейчас буду пробовать

Добавлено через 17 минут
попробовал... приведу код actionscript'a
Код AS3:

function setText () {
  textField.text = "function work";
}
if (ExternalInterface.available) {
  try {
    ExternalInterface.addCallback("myFunction", setText)
    textField.text = "addCallback done";
  } catch (e) {
    textField.text = e;
  }
}

собственно функция setText должна просто менять текстовое поле.
в разных вариантах: при пустой функции, при вставке конструкции try/catch, и при простой попытке смены текста выдается эта нехорошая ошибка.
Мое подозрение, что ошибка возникает в момент связи между js и as, а не при исполнении функции as.
Можно ли посмотреть пошагово процесс установки соединения и передачи данных между js и as ?

mikhailk 02.09.2010 14:54

а сама js-функция точно работает?

вставьте в хтмл кнопку с onClick="myFunction();" и посмотрите, что происходит.
смотреть надо в дебаг-режиме каком-нибудь

Kubik129 02.09.2010 15:59

Сама javascript функция занимается только вызовом as-функции выглядит она так:
Код AS3:

function changeText () {
  var flashObj = document["myFlashId"];
  flashObj.myFunction();
}

да, она точно работает, ее я firebug'ом посмотрел. До вызова myFunction все отлично, но на нем и вылезает эта ошибка

Stargazer 02.09.2010 17:08

Наверное, у вас что-то необычное в коде происходит, если ошибка происходит именно в момент вызова js. Я бы подумал, что ошибка происходит от того, что вы из js вызываете обратно as, но если и пустая js-функция не работает - то, значит, нет.

Перечисляйте, наверное, какие у вас нетривиальные вещи использованы, на чём пишете, чем тестируете, браузер... Какая-нибудь мелочь способна решить проблему.

У меня, вот, ошибка возникала из-за того, что имя флешки (точнее - id этой флешки на странице) начиналось с цифры.


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

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