Особенности работы с Flash
В разделе рассмотрены особенности работы Flash и приведены проблемы, с которыми может столкнуться разработчик при использовании данной технологии.
Использование Flash-апплета
При работе с Flash-плеером могут возникнуть как минимум две ситуации, которые приведут к блокировке Flash-апплета, но которые при этом нельзя отследить через JavaScript-код:
Пользователь использует устаревшую версию Flash-плеера.
Данную проблему нельзя отследить на уровне клиентского кода, так как практически невозможно узнать точную версию Flash-плеера. Дело в том, что некоторые плагины для браузеров выводят неправильные номера версий. Встречались случаи, когда номер версии был 99.999.999 или наоборот 0.0.0.
Наличие Flash-блокировщиков.
Данную ситуацию также практически невозможно отследить с помощью JavaScript, так как многие Flash-блокировщики работают непредсказуемо. Например, одни стараются замаскировать свое присутствие, другие производят блокировку по нестандартному сценарию (например, позволяют Flash-апплету полностью загрузиться и выполнить какой-нибудь код и лишь после этого блокируют его).
При возникновении таких ситуаций Flash-апплет становится неактивным, отображая пользователю уведомление о блокировке. Как правило, разрешить проблему может сам пользователь — для разблокировки достаточно кликнуть по Flash-апплету (и при необходимости обновить версию). Однако при добавлении Flash-апплета на страницу YandexAudio API по умолчанию скрывает его, позиционируя в невидимой части страницы. Поэтому пользователь просто не узнает о возникновении проблемы с Flash-плеером и тем более не сможет решить ее.
Для решения этой проблемы в конструктор плеера можно передать оверлей — ссылку на любой HTML-элемент блочного типа (подробнее см. Аудиоплеер). API разместит в этом элементе Flash-апплет, задав ему размеры 1000х1000 пикселей (и указав свойство 'overflow: hidden
'). В случае если браузер заблокирует Flash-апплет, в оверлее будет отображено соответствующее уведомление. Таким образом, пользователь будет проинформирован о факте блокировки и сможет разблокировать плеер, кликнув по Flash-апплету.
Если при инициализации плеера ошибок не произошло, то оверлей можно скрыть. Обратите внимание, что оверлей нельзя просто удалить из DOM-дерева или задать ему свойство 'display: none', так как это приведет к прекращению работы Flash-апплета. Для того чтобы скрыть оверлей, можно применить к нему следующий стиль:
position: absolute;
top: -9999px;
left: -9999px;
Пример настройки оверлея приведен в разделе Пример использования.
Особенности работы с Flash
В реализации Flash-плеера в YandexAudio API есть несколько особенностей, на которые следует обратить внимание:
Flash-апплет является синглтоном.
Это означает следующее: если на странице создать несколько Flash-плееров, на нее будет добавлен только один Flash-апплет. Этот апплет будет управлять работой всех Flash-плееров на странице — он создаст во Flash-окружении несколько экземпляров плеера и будет обрабатывать их запросы и события.
У такого подхода есть ряд преимуществ:
- значительно снижается потребление памяти при использовании нескольких плееров на странице;
- при наличии Flash-блокировщиков инициализация требуется всего один раз для любого количества плееров.
Текущая реализация Flash-плеера в API достаточно проста и потому имеет одно ограничение: нельзя ставить позицию воспроизведения дальше загруженной части трека.
При установке новой позиции воспроизведения через графический интерфейс следует всегда считывать значение, которое возвращает функция setPosition() — оно будет отражать реальную позицию, на которую было установлено воспроизведение.