Вёрстка « Сообщение об отключенном flash

Есть форма загрузки файла. Изначально используется swf, но для людей без него, хотелось бы вывести простой input(type=file). Но не могу найти в интернете материалы по проверке наличия flash из js или же просто через html. Короче говоря - ничего не нашел.

Прошу у вас помощи. Может кто чего знает...

1 ответов


Песочница:

function flashDetect() {
    try {
        b = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version')
    } catch (e) {
        b = navigator.plugins['Shockwave Flash'];
        b = b ? b.description : '';
    }

    return b.match(/\d+/); // возвращает версию флеша
}

alert(flashDetect());
 
Всякие огромные проверки совершенно не нужны — там обрабатываются всякие очень специфические ситуации, которые возникнут всего лишь у 0.001% пользователей, а такой мизер можно не учитывать.

адаптировал функцию проверки версии плейра из jqeury.flash.js



            hasFlash = function() {
                var defaultVersion = '6.0.65';
                var pv = playerVersion().match(/\d+/g);
                var rv = String([arguments[0], arguments[1], arguments[2]]).match(/\d+/g) || defaultVersion.match(/\d+/g);
                for(var i = 0; i < 3; i++) {
                    pv[i] = parseInt(pv[i] || 0);
                    rv[i] = parseInt(rv[i] || 0);
                    if(pv[i] < rv[i]) return false;
                    if(pv[i] > rv[i]) return true;
                }
                return true;
            };


            playerVersion = function() {
                // ie
                try {
                    try {
                        // avoid fp6 minor version lookup issues
                        // see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
                        var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
                        try { axo.AllowScriptAccess = 'always';  }
                        catch(e) { return '6,0,0'; }
                    } catch(e) {}
                    return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
                    // other browsers
                } catch(e) {
                    try {
                        if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin){
                            return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
                        }
                    } catch(e) {}
                }
                return '0,0,0';
            };
 

Пример использования

if(!hasFlash()){
 alert('Please install flash player');
}
if(!hasFlash(11,4,402)){
 alert('Please install flash player version 11,4,402');
}
 

http://www.adobe.com/devnet/flashplayer/articles/swfobject.html

http://stackoverflow.com/questions/998245/how-can-i-detect-if-flash-is-installed-and-if-not-display-a-hidden-div-that-inf