Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Определение версии Flash


Автор: GoodBoy 29.11.2005, 15:49
Есть код:
Код

Md=document;
Mnv=navigator;
Mn=(Mnv.appName.substring(0,2)=="Mi")?0:1;

if(!Mn&&Mnv.userAgent.indexOf("Opera")<0&&Mnv.userAgent.indexOf("Mac")<0&&(Mnv.appVersion.indexOf("MSIE 5")>-1||Mnv.appVersion.indexOf("MSIE 6")>-1)){
    Md.body.style.behavior='url(#default#clientCaps)';
    alert(Md.body.getComponentVersion("{D27CDB6E-AE6D-11cf-96B8-444553540000}","ComponentID"));
}
if(Mnv.plugins.length){
    for(i=0;i<Mnv.plugins.length;i++){
        if(Mnv.plugins[i]['name'].toUpperCase().indexOf("SHOCKWAVE FLASH")>-1){alert(Mnv.plugins[i]['description']);break;}
    }
}


И всё было нормально до тех пор, пока я не поставил Flash-плеер версии 8.0.22.0... После этого версия флеша в ИЕ перестала опредиляться...

Автор: Sardar 30.11.2005, 01:02
По идее компонент не стоит в списке:
http://msdn.microsoft.com/workshop/author/behaviors/reference/methods/detectable.asp
Так что работать вообще никогда не должно...

Автор: GoodBoy 30.11.2005, 10:36
Цитата(Sardar @ 30.11.2005, 01:02)
По идее компонент не стоит в списке:

В этом списке только Микрософтовские компоненты, а {D27CDB6E-AE6D-11cf-96B8-444553540000} - ID Флеша! И оно прекрасно работает!!! Но не с 8-й версией... :-((((

Кстати getComponentVersion будет работать с ЛЮБЫМ корректным для такой операции IDшником, а не только с теми, что в списке...

Автор: Ciber SLasH 30.11.2005, 20:13
Цитата(GoodBoy @ 30.11.2005, 10:36)
а {D27CDB6E-AE6D-11cf-96B8-444553540000} - ID Флеша! И оно прекрасно работает!!! Но не с 8-й версией... :-((((

А вот и не работает. У меня Flash 6.0 (дефолтный, который идёт вместе с WinXP SP2), но вот этот код:
Код
<HTML xmlns:IE>
<HEAD>
<STYLE>
@media all {
    IE\:clientCaps {behavior:url(#default#clientcaps)}
}
</STYLE>
</HEAD>

<BODY>
<IE:clientCaps ID="oClientCaps" />
<script type='text/javascript'>
alert(oClientCaps.isComponentInstalled("{D27CDB6E-AE6D-11CF-96B8-444553540000}", "ComponentID"));
</SCRIPT>
</BODY>

не работает, т.е. всегда "false".

А вот в Opera и FireFox работает следующий код (но не работает в IE):
Код
<script type='text/javascript'>
/*** Поиск плагина "Shockwave Flash" *(ver 1)**/
function findFlash_1() {
    for (var i = 0; i < navigator.plugins.length; i++)
        if ( (navigator.plugins[i].description).indexOf("Shockwave Flash") != -1 ) {
            return true;
            break;
        }
return false;
}

/*** Поиск плагина "Shockwave Flash" *(ver 2)**/
function findFlash_2() {
    for (var i = 0; i < navigator.mimeTypes.length; i++)
        if ( (navigator.mimeTypes[i].type).indexOf("application/x-shockwave-flash") != -1 &&
            navigator.mimeTypes[i].enabledPlugin != null ) {
            return true;
            break;
        }
return false;
}

/*** Поиск версии плагина "Shockwave Flash" ***/
/*    @param ver — если указан, то сравнивается текущая версия флэша со значением
    этого параметра и результат будет: true | false. Если этот параметр не
    указан, то результатом будет строка, содержащая версию флэша.
*/
function compareFlashVersion(ver) {
var Result = false;

    for (var i = 0; i < navigator.plugins.length; i++)
        if ( (navigator.plugins[i].description).indexOf("Shockwave Flash") != -1 ) {
            if (!ver)
                Result = (navigator.plugins[i].description).slice(15);
            else if ( (navigator.plugins[i].description).indexOf(ver) != -1 )
                Result = true;
            return Result;
            break;
        }

return Result;
}
document.write("<b>findFlash_1(): </b>" +findFlash_1()+ "<br>" +
    "<b>findFlash_2(): </b>" +findFlash_2()+ "<br>" +
    "<b>FlashVersion: </b>" + compareFlashVersion())
</script>

Автор: PARROT 30.11.2005, 20:31
Код

<script LANGUAGE="Javascript">
var flashinstalled = 0;
MSDetect = "false";

if (navigator.mimeTypes && navigator.mimeTypes.length)
{
x = navigator.mimeTypes['application/x-shockwave-flash'];
if (x && x.enabledPlugin) flashinstalled = 2;
else flashinstalled = 1;
}
else
{
MSDetect = "true";
}
</SCRIPT>


Автор: Ciber SLasH 30.11.2005, 20:49
2PARROT:
Это не работает, почему не проверяешь перед тем, как запостить?

Автор: Sardar 30.11.2005, 22:19
Цитата(Ciber @ 30.11.2005, 19:13)
А вот в Opera и FireFox работает следующий код (но не работает в IE):

Потому что ИЕ navigator.mimeTypes не публикует, все остальные там исправно все плагины складывают.

В коде от PARROT ИЕ не проверяеться, просто считаеться, что если IE, то флеш установлен. В принципе он всегда установлен под ИЕ smile

Цитата(GoodBoy @ 30.11.2005, 09:36)
Кстати getComponentVersion будет работать с ЛЮБЫМ корректным для такой операции IDшником, а не только с теми, что в списке...

На самом деле нет, MS гарантирует правильную работу только для указанных в списке компонент. Вообще все зарегистрированные в системе компоненты перебрать нельзя, странно что флешь так ранее определялся.

Автор: Ciber SLasH 30.11.2005, 22:40
Цитата(Sardar @ 30.11.2005, 22:19)
В коде от PARROT ИЕ не проверяеться, просто считаеться, что если IE, то флеш установлен.

Тогда ясно... но это не факт, вдруг у кого-то flash.ocx не зарегистрирован в системе — тогда её код будет работать неверно, а именно MSDetect будет всегда true.

Автор: GoodBoy 1.12.2005, 11:12
2 Ciber SLasH
Дефолтный - это не то! Он вообще определяться не хочет ни где.... :-))))))))

2 PARROT
Мне нужно не есть флеш или нет, а его версию определить!!!!!!!!

Автор: PARROT 1.12.2005, 11:31
Код

<script LANGUAGE=JavaScript1.1>
<!--
var MM_contentVersion = НУЖНАЯ_ВЕРСИЯ_ФЛЕШКИ;
var plugin = (navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"]) ? navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin : 0;
if ( plugin ) {
        var words = navigator.plugins["Shockwave Flash"].description.split(" ");
        for (var i = 0; i < words.length; ++i)
        {
        if (isNaN(parseInt(words[i])))
        continue;
        var MM_PluginVersion = words[i]; 
        }
    var MM_FlashCanPlay = MM_PluginVersion >= MM_contentVersion;
}
else if (navigator.userAgent && navigator.userAgent.indexOf("MSIE")>=0 
   && (navigator.appVersion.indexOf("Win") != -1)) {
    document.write('<SCR' + 'IPT LANGUAGE=VBScript\> \n'); //FS hide this from IE4.5 Mac by splitting the tag
    document.write('on error resume next \n');
    document.write('MM_FlashCanPlay = ( IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash." & MM_contentVersion)))\n');
    document.write('</SCR' + 'IPT\> \n');
}
if ( MM_FlashCanPlay ) {
    // ФЛЕШ УСТАНОВЛЕН
} else{
    // ФЛЕШ НЕ УСТАНОВЛЕН
}
//-->
</SCRIPT>

http://artem.philology.nsc.ru/0x0f0f0f/documen/sites/sysoev.ru/web/flash.html

Автор: GoodBoy 1.12.2005, 11:34
PARROT
Мне нужна ВЕРСИЯ флеша!!!!!!!!

Автор: Sardar 1.12.2005, 15:49
GoodBoy в примере PARROT создаёться тестовый обьект флеша заданной версии, если исключений не было, значит флешь есть. По аналогии, можешь перебирать все smile

PARROT не обязательно пользоваться VBS для отлова ошибок, в JS есть try/catch smile

Автор: GoodBoy 1.12.2005, 16:09
Sardar, мне не нужно знать есть флеш или нет! Мне нужно знаеть его версию!

Автор: Sardar 1.12.2005, 16:23
Цитата(GoodBoy @ 1.12.2005, 15:09)
Sardar, мне не нужно знать есть флеш или нет! Мне нужно знаеть его версию!

Эмоции в сторону, подумай над решением:
Цитата(Sardar @ 1.12.2005, 14:49)
По аналогии, можешь перебирать все

Криво, но пока ничего лучшего не всплыло.

Автор: GoodBoy 1.12.2005, 16:39
Блин, зашибись... В кои-то веки попросил помощи, привёл код, который практически всегда работает корректно, за небольшим исключением. И получил в ответ - "работать не должно было", "подумай над решением"... Спасибо, блин, помогли!!!

Автор: butionok 2.12.2005, 02:21
ё-моё.. С каких это пор опредЕление пишется через "И"!!!!!????

Javascript значит выучили. HTML выучили. С++ тоже выучили. А теперь учите русский.

Извините за "оффтоп". Наболело.

P.S. Вам тут явно не хватает модератора, который бы исправлял ваш русский.

М
 
Раз глаза мозолит, подредактировал, но вообще людям свойственны ошибки, набивают то текст быстро :)
Если ещё и на правильную расстановку запятых глянуть, то всем нам пора снова отправляться учить русский :D

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)