Хочу поделиться опытом решения проблемы вызова функции
ExternalInterface.call для браузера
Opera 9.25+ (более ранние версии не тестировались).
Возникла следующая трудность.
У меня был клип меню для сайта, структура которого загружалась из XML, а дальше программно создавались кнопки, вложенное меню и т.п. При этом обработчики событий для кнопок-пунктов меню и анимация для их появления задавалась также программно.
Фишка меню состоит в том, что оно 2-уровневое и пункты, которые содержат вложения, плавно разворачиваются/сворачиваются по нажатию на них. В связи с этим возникла необходимость динамического изменения высоты объекта (flash-ролика swf) в браузере средствами JavaScript. Для решения этой проблемы была создана js-функция
matchClipSize(width, height), которая и изменяла высоту клипа по запросу. (Для реализации этой фнукции в JS был использован фреймворк
MooTools, а для внедрения клипа в HTML -
SWFObject 2.0, если кому-то это интересно).
Таким образом, при разворачивании/сворачивании меню из ролика вызывался метод:

Код:
import mx.transitions.Tween;
import flash.external.*;
<...>
function resizeMovieJS(jsWidth, jsHeight) {
<...>
ExternalInterface.call("matchClipSize", jsWidth, jsHeight);
}
При этом при
разворачивании пункта меню JS вызывался
до события разворачивания, а при
сворачивании пункта -
после. Для того, чтобы отследить событие окончания сворачивания пункта меню (программная анимация), пришлось ставить слушатель:

Код:
function unfoldMenu() {
<...>
if (!unfoldItem) { // Если нужно свернуть объект, то придется дождаться окончания анимации
tweenObject.onMotionFinished = function() {
_root.resizeMovieJS(mWidth, mHeight);
}
}
else { // ...а если развернуть - то сначала изменить размеры клипа, а только потом запустить анимацию
_root.resizeMovieJS(mWidth, mHeight);
}
tweenObject.start(); // Запуск программной анимации.
}
А теперь -
СУТЬ ПРОБЛЕМЫ. В общем, при отладке ролика выяснилось, что все браузеры (даже IE) работают корректно - за исключением Opera (у меня была версия 9.25 с Flash Player 9). Баг Opera состоял в том, что flash-плеер не хотел вызывать метод
ExternalInterface.call из простых функций в корне клипа (в моем случае -
unfoldMenu) - зато отлично вызывал этот метод из обработчика
tweenObject.onMotionFinished.
Решение проблемы
Никакие ухищрения и мой здравый смысл (а также
переустановка FlashPlayer и обновление до
Opera 9.27) не помогали, пока я не решился сделать вот это внутри функции
unfoldMenu():

Код:
function unfoldMenu() {
<...>
if (!unfoldItem) { // Если нужно свернуть объект, то придется дождаться окончания анимации
tweenObject.onMotionFinished = function() {
_root.resizeMovieJS(mWidth, mHeight);
}
}
else { // ...а если развернуть - то сначала изменить размеры клипа, а только потом запустить анимацию
// _root.resizeMovieJS(mWidth, mHeight); - этот способ не работает в Opera!
_root.operaBugInterval = setInterval(_root, "resizeMovieJS", 1, mWidth, mHeight);
}
tweenObject.start(); // Запуск программной анимации.
}
То есть, мною было найдено только одно решение проблемы: установить небольшой
таймер для вызова этой функции. Да, ну и, разумеется, пришлось
очищать таймер в самой функции вызова JS:

Код:
function resizeMovieJS(jsWidth, jsHeight) {
<...>
if (_root.operaBugInterval != undefined) {
clearInterval(_root.operaBugInterval);
}
ExternalInterface.call("matchClipSize", jsWidth, jsHeight);
}
Таким образом мною был сделан вывод, что в браузере Opera есть баг FlashPlayer 9, который некорректно вызывает
ExternalInterface.call из простых функций, не связанных со слушателями событий. Так это реально или нет, разбираться у меня не было времени - а кроме того, глючила только Opera, да и AS-код, кажется, у меня нормальный.
Одним словом, я надеюсь, что мой пост поможет кому-то, кто (не дай бог, конечно

) столкнется с такой узкоспецифической проблемой)) Всем, кто дочитал мой пост до конца -
спасибо за внимание! 
Буду рад, если кто-то выскажет пару умных мыслей насчет описанной проблемы, т.к. в форуме я ничего подходящего не нашел.
P.S. Работающую версию описанного выше скрипта меню смотрите на этом проекте:
www.ilove-you.ru