Персональный
сайт
Игоря
Сысоева


 
english
обо мне
 
sysoev.ru
 
nginx
 
mod_accel
mod_realip
mod_deflate
программирование
всякая всячина
windows
freebsd
apache
pppd
unix
web
 
 

Определение версии Flash

 

28.09.2002

Достаточно компактный код для определения версии Flash:

<script language="javascript"><!--

var plugin;
var version = 5;
var flash = false;

if (navigator.plugins) {
    if (navigator.plugins["Shockwave Flash"]) {
        plugin = navigator.plugins["Shockwave Flash"].description;
        flash = parseInt(plugin.indexOf('Flash') + 6) >= version;

    } else {
        if ((navigator.userAgent.indexOf('MSIE') != -1)
            && (navigator.userAgent.indexOf('Win') != -1))
        {
            var vb = '<script language="vbscript">\n'
                   + 'if ScriptEngineMajorVersion >= 2 then\n'
                   + '  on error resume next\n'
                   + '  flash = IsObject(CreateObject('
                   + '     "ShockwaveFlash.ShockwaveFlash.'
                   +        version + '"))\n'
                   + 'end if\n'
                   + '<' + '/script>';
            document.write(vb);
        }
    }
}
//--></script>

Небольшой комментарий к коду. В переменной version задаётся интересующий номер версии Flash. Если указанная версия обнаружена, то переменная flash будет иметь истинное значение.

В раритетных по нынешним временам MSIE 3.0 для Windows и Netscape 2.0 нет свойства navigator.plugins. То же самое относится к MSIE 3.0.1-4.5 для Macintosh.

Свойство navigator.plugins["Shockwave Flash"] может быть в Netscape, начиная с версии 3.0, в Opera для Windows, начиная с 5.0, Opera 6.0 для Linux и в MSIE 5.0 для Macintosh. Возвращаемая строка имеет следующий вид: "Shockwave Flash 5.0 r47". MSIE 4.x и выше для Windows этого свойства не имеют, поэтому для этих браузеров нужно попытаться создать AciveX объект с помощью vbscript.

В скриптах часто используют свойство navigator.mimeTypes["application/x-shockwave-flash"], однако только использование свойства navigator.plugins["Shockwave Flash"].description позволяет определить версию Flash.

vbscript рекомендуется создавать динамически, так как MSIE 4.0 для Macintosh его не воспринимает и выдаёт предупреждение "This page contains Active Scripting scripts written in VBScript. Do you want to continue ?", несмотря на то, что выполнить он его всё равно не сможет. "</script>" в этом случае нужно записать как "'<' + '/script>'", иначе браузер воспримет его как конец всего скрипта.

Проверку "ScriptEngineMajorVersion >= 2" можно убрать, так как в MSIE 4.x vbscript версии 2, а MSIE 3.0 в это место не попадёт.

Flash2 не вписывается в эту схему. Во-первых, плагин нужно проверять как navigator.plugins["Shockwave Flash 2.0"]. А во-вторых, ActiveX объекта c именем "ShockwaveFlash.ShockwaveFlash.2" нет, зато есть "ShockwaveFlash.ShockwaveFlash.1". Впрочем, Flash2 сейчас вряд ли кого-то интересует.

Из более или менее распространённых браузеров скрипт не может определить версию Flash в MSIE 3.0.1-4.5 для Macintosh, в Opera для Linux (версия 5.x) и Macintosh и в Konqueror. То же относится и к WebTV, но поскольку в нём может быть установлен только Flash2 или Flash3, то он не представляет практического интереса.

Ниже приводится результат проверки наличия Flash5 в Вашем браузере:

Ссылки:

(C) Игорь Сысоев
http://sysoev.ru