Особенности работы с 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 есть несколько особенностей, на которые следует обратить внимание:

  1. Flash-апплет является синглтоном.

    Это означает следующее: если на странице создать несколько Flash-плееров, на нее будет добавлен только один Flash-апплет. Этот апплет будет управлять работой всех Flash-плееров на странице — он создаст во Flash-окружении несколько экземпляров плеера и будет обрабатывать их запросы и события.

    У такого подхода есть ряд преимуществ:

    • значительно снижается потребление памяти при использовании нескольких плееров на странице;
    • при наличии Flash-блокировщиков инициализация требуется всего один раз для любого количества плееров.
    Однако следует иметь в виду, что при возникновении ошибки в работе Flash-апплета есть вероятность того, что прекратят работу сразу все Flash-плееры.
  2. Текущая реализация Flash-плеера в API достаточно проста и потому имеет одно ограничение: нельзя ставить позицию воспроизведения дальше загруженной части трека.

    При установке новой позиции воспроизведения через графический интерфейс следует всегда считывать значение, которое возвращает функция setPosition() — оно будет отражать реальную позицию, на которую было установлено воспроизведение.