Проверка установленных плагинов средствами JavaScript/VBScript

Привет. Столкнулся на днях с проблемой, для которой было найдено неожиданное решение. Возможно, кому-то будет полезно.

Стало быть, так сложилось, что возникла необходимость средствами JavaScript (или чего-нибудь подобного) выяснить, установлен ли на машине пользователя Flash-player или нет. Точнее, хотелось узнать, установлена ли на браузере пользователя соответствующая надстройка. Чекается это с пол-пинка:

<SCRIPT LANGUAGE=«Javascript»>
if (navigator.plugins && navigator.plugins.length)
{
if (navigator.plugins[«Shockwave Flash»])
{
alert(«Flash is installed!»);
}
}
</SCRIPT>

Но этот чудесный код не работает в MSIE! Как выяснилось, есть такая проблема — массивы navigator.plugins и navigator.mimeTypes в контексте IE всегда остаются пустыми!

На этот случай пишем скрипт на VBScript’е — попробуем дотянуться к плагину по его имени, через метод CreateObject. Имя будем формировать так: к основе «ShockwaveFlash.ShockwaveFlash» будем в цикле добавлять номер версии. Проблема здесь в том, что в случае, если плагин с заданным именем не найден, скрипт валится и на следующую итерацию не идет. Чтобы этого избежать, вставляем в самом начале объявление «on error resume next». В конечном итоге скриптик на странице будет выглядеть так:

<SCRIPT LANGUAGE=«VBScript»>

on error resume next

For i = 1 to 10
If IsObject(CreateObject(«ShockwaveFlash.ShockwaveFlash.» & i)) Then
MsgBox «Flash is installed»
Exit For
End If
Next

</SCRIPT>

Для того, чтобы не заморачиваться на определение типа браузера, разместим эти скрипты на одной странице последовательно. Примерно так:

<SCRIPT LANGUAGE=«Javascript»>

var FlashInstalled = 0;
if (navigator.plugins && navigator.plugins.length)
{
alert(«non-IE checking»);
if (navigator.plugins[«Shockwave Flash»])
{
FlashInstalled = 1;
}
}

</SCRIPT>

<SCRIPT LANGUAGE=«VBScript»>

on error resume next

If FlashInstalled = 0 Then
MsgBox «IE checking»
For i = 1 to 10
If IsObject(CreateObject(«ShockwaveFlash.ShockwaveFlash.» & i)) Then
FlashInstalled = 1
Exit For
End If
Next
End If

</SCRIPT>

<script>
if(FlashInstalled == 1)
alert(«Flash is installed!»);
else
alert(«Flash is not detected»);
</script>

Последний блок, равно как и вызовы alert и MsgBox введены для наглядной демонстрации работоспособности скрипта.

Верное направление подсказала мне вот эта статейка:

http://www.xs4all.nl/~ppk/js/flash.html

Проверка установленных плагинов средствами JavaScript/VBScript: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *