Флэш детектор или Не бросим юзера в трудную минуту

Adobe flash detectionСтолкнулся я недавно по работе с такой темой – есть некая менюшка, сделаная на флэше, и вставленая в html-документ. Все просто, но есть один момент. Заказчик ну никак не желает терять ее функционал, вне зависимости от того, есть ли на машине клиента флэш/javascript или нет. И он в принципе прав, не смотря на то что делать меню на флэше – изначально не верный подход.

Итак, что же нам нужно? Нужно создать еще одно меню, естественно XHTML/CSS, с картинками, которое будет загружаться в браузер клиента при отсутствии на его машине flash/javascript. Да хотя бы даже заменить флэшевый баннер на обычный, чтобы не терять рекламу. Я подготовил два простых решения, которые помогли мне и надеюсь, помогут вам.

Решение номер раз. SWFObject

Geoff Stearns, главный разработчик компании Schematic, создал и описал у себя на блоге скрипт, который решает эту проблему. И в принципе на этом можно было бы и остановиться, но.

В моем случае, после установки у себя этого скрипта на некоторых из машин, на которых был установлен Internet Explorer 6 и Flash Player 6, без всяких видимых причин происходил сбой и браузер благополучно умирал.

В Файрфоксе, Опере и IE7 ничего такого не происходило и все работало отлично. Но мы посетителями не разбрасываемся и поэтому я решил найти другое решение, так как в комментариях к описанию SWFObject я ничего кроме восторженных отзывов не нашел.

Это решение все таки имеет право на существование, поэтому решайте сами.

Качаем у разработчика, или у меня.

Решение номер два. Adobe Flash Detection Kit.

Adobe Inc.Как и в прошлый раз, я решил обратиться к первоисточнику, а именно к компании-разработчику Flash, Adobe. И не пожалел об этом. Детектор версии/присутствия flash player’а на машине пользователя, созданный их разработчиками полностью решает нашу проблему.

Скрипт, предоставляемый ими, разделен на три части:

– Action Script detection – SWF файл, встроеный в HTML документ, который определяет версию плеера. Естественно с исходниками.

– Client Side detection – Javascript/HTML блок, вставляющийся в любой документ в котором нужно определить версию плеера. В этом же блоке описывается альтернативный контент, который нужно вывести если не установлен флеш плеер, и контент, который будет отображаться если у посетителя нет ни флеш плеера, ни поддержки javascript’a. Единственное неудобство – если в обоих случаях вы хотите выводить XHTML/CSS меню/контент, то нужно прописывать его дважды. Или же вытаскивать через переменную.

– Express Installation – Тоже самое что и Client Side detection, но автоматически запускает экспресс-инсталяцию плагина при его отсутствии.

Посмотрим как это выглядит:

<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Client Detection Example</title>
<script xsrc="AC_OETags.js" mce_src="AC_OETags.js" language="javascript"></script>
<script language="JavaScript" type="text/javascript">
<!--
// --------------------------------------------------
// Globals
// Major version of Flash required
var requiredMajorVersion = 8;
// Minor version of Flash required
var requiredMinorVersion = 0;
// Minor version of Flash required
var requiredRevision = 0;
// --------------------------------------------------
// -->
</script>
</head>
<body>
<script language="JavaScript" type="text/javascript">
<!--
// Version check based upon the values entered above in "Globals"
var hasReqestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
// Check to see if the version meets the requirements for playback
if (hasReqestedVersion) {
// if we've detected an acceptable version
// вывод флэша, при условии что пройдены все проверки
AC_FL_RunContent(
"src", "example",
"width", "550",
"height", "200",
"align", "middle",
"id", "detectionExample",
"quality", "high",
"bgcolor", "#FFFFFF",
"name", "detectionExample",
"allowScriptAccess","sameDomain",
"type", "application/x-shockwave-flash",
'codebase', 'http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab',
"pluginspage", "http://www.adobe.com/go/getflashplayer"
);
} else { // если версия плэера слишком старая или не определена
var alternateContent = 'Сюда вписываем контент, подгружаемый если версия плэера слишком старая или не определена <BR/>'
+ 'И сюда. '
+ '<а hrеf=http://www.adobe.com/go/getflash/>Get Flash</a>';
document.write(alternateContent); // insert non-flash content
}
// -->
</script>
<noscript>
А сюда вписываем контент, который будет выводиться при отсутствии и флеша и поддержки javascript.
This content requires the Adobe Flash Player and a browser with JavaScript enabled.
<a hrеf="http://www.adobe.com/go/getflash/" mce_href="http://www.adobe.com/go/getflash/" >Get Flash</a>
</noscript>
</body>
</html>

Скачать можно на сайте Adobe или у меня.

* Имя файла ролика в скрипте вставляется без расширения .swf.

* Скрипт сохраняет валидность кода.

Не забываем правильно указать пути к .js файлам и включать фантазию иногда.

Другие решения приветствуются, так что если у вас есть что сказать – пишите в комментарии. Надеюсь что статья вам помогла.

P.S. Этот скрипт адаптирован к настройкам безопасности в Интернет Эксплорере и выводит флэш без рамочки. Об этой проблеме я писал ранее.

4 thoughts on “Флэш детектор или Не бросим юзера в трудную минуту

  1. За “Adobe Flash Detection Kit” отдельный респект автору, достаточно часто видел самописные скрпиты, но вот зайти на сайт разработчика как-то не хватало банальной эрудиции, что называется. Исчерпывающая вещь – при весе в 8кБ на твердую пятерку выполняет подавляющее большинство ТЗ.

    ::

  2. Большое спасибо автору, так приятно было найти полный ответ сразу на два очень интересующих меня вопроса :)

  3. Пост хороший, вот только проблема осталась – IE 6 все так же падает. Не может пережевать этот скрипт. Сталкивался ли кто с подобным?

Leave a Reply

Your email address will not be published. Required fields are marked *