Достаточно компактный код для определения версии 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.charAt(plugin.indexOf('.') - 1)) >= 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.
Вместо plugin[] нужно использовать plugin.charAt(), так как, по крайней мере, Opera не понимает первое выражение.
В скриптах часто используют свойство 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>'", иначе бразуер воспримет его как конец всего скрипта.
Проверку "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 в Вашем браузере:
plugin: Shockwave Flash 10.3 r181
flash: false
Flash5 not found
Полная версия скрипта:
<div style="background:#e0efe0;">
<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.charAt(plugin.indexOf('.') - 1)) >= version;
document.writeln('plugin: ' + plugin + '<br>');
document.writeln('flash: ' + flash + '<br>');
}
else
{
document.writeln('no plugin<br>');
plugin = 'no plugin';
if ((navigator.userAgent.indexOf('MSIE') != -1)&&(navigator.userAgent.indexOf('Win') != -1))
{
var vb = '<script language="vbscript">\n'
+ ' on error resume next\n'
+ ' flash = IsObject(CreateObject('
+ ' "ShockwaveFlash.ShockwaveFlash.' + version + '"))\n'
+ '<' + '/script>';
document.write(vb);
if (flash)
{
document.writeln('ActiveX Flash' + version + ' object found<br>');
plugin = 'no plugin, ActiveX object';
}
else
{
document.writeln('ActiveX Flash' + version + ' object not found<br>');
}
}
}
}
else
{
document.writeln('no plugins');
plugin = 'no plugins';
}
if (flash)
document.writeln('Flash' + version + ' found');
else document.writeln('Flash' + version + ' not found');
//-->
</script>
<noscript>no javascript - no Flash detection </noscript>
</div>