Попытка скрыть и показать проигрыватель Flash видео с ExternalInterface - PullRequest
2 голосов
/ 01 марта 2011

Я пытаюсь создать оверлей, содержащий флэш-плеер, который отображается, когда пользователь нажимает на ссылку.Див, содержащий игрока, начинается с display:none в CSS.После нажатия будет показан div, и JS будет использовать ExternalInterface для настройки и запуска проигрывателя.JS настраивает проигрыватель, когда он ловит событие «flash ready», которое запускается Flash на ADDED_TO_STAGE.

Все это работает, за исключением того, что обратные вызовы ExternalInterface никогда не создаются.JS и AS3 работают нормально, если проигрыватель отображается при загрузке страницы или скрыт с visibility:hidden вместо display:none.Мне известно, , что Flash не будет инициализирован с display:none, и это работает, как и ожидалось: когда Flash не отображается, он запускает свои события и корректно инициализирует все остальное (например, GUI, другие внутренние вещи),Единственное, что не происходит, как ожидалось, это то, что мои обратные вызовы ExternalInterface не добавляются.

ExternalInterface.available верно.Это не проблема синхронизации, потому что даже через несколько минут обратных вызовов все еще нет.Самым странным является то, что флэш-память может вызывать JS, прекрасно запускает события JS, и код для запуска событий идет после кода для добавления обратных вызовов.Там нет ошибок, генерируемых любым из кода AS3.Я вижу эту проблему как в Chrome, так и в Firefox.

FWIW, я кодирую HTML-код для вставки напрямую, а не с помощью SWFObject, из-за некоторых необычных требований.

Кто-нибудь сталкивался с этимчто-то вроде проблемы с display:none и ExternalInterface?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 марта 2011

Это оказалось проблемой с некоторыми деталями, которые я замутил, думая, что они не важны (извините!).Отображение / скрытие видео Flash обрабатывалось FancyBox, который фактически копирует ваш скрытый HTML в новый div и отображает этот div.Это сработало как таковое, и новоиспеченный игрок смог инициализировать и запускать события.Однако он использовал ExternalInterface.objectID для ссылки на себя, и благодаря FancyBox теперь в DOM было два элемента с одинаковым идентификатором.Поэтому для событий, которые были инициированы, например, $(#objectId).trigger(...), .target было установлено на оригинальный проигрыватель Flash, который все еще был скрыт, и поэтому не был инициализирован и не имел обратных вызовов, которые я искал.

Я решил эту проблему, поместив HTML-код для fancybox в тег HTML-сценария:

<script type="text/html" id="fancyBoxTargetId">[Flash player html]</script>

. Это предотвратило появление в DOM двух элементов с одинаковым идентификатором (это хорошо сделать в любом случае) и позволило Flash самостоятельно-ссылка используя ExternalInterface.objectID.

0 голосов
/ 02 марта 2011

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

Надеюсь, это поможет!

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