webew
Войти » Регистрация
 
JavaScript

Определение версии flash-плеера

14 мая 2008, 2:27
Автор: Александр Бурцев [bur]

Для эффективной вставки "флешек" иногда требуется определить версию flash-плеера.

Замечания:
1) В IE информацию о версии плеера можно узнать воспользовавшись компонентом ActiveX.
2) В остальных браузерах эта информация содержится в дочернем объекте plugin объекта navigator.

function flashVersion() {
    // Отдельно определяем Internet Explorer
    var ua = navigator.userAgent.toLowerCase();
    var isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1);
    // Стартовые переменные
    var version = 0;
    var newversion;
    var lastVersion = 10; // c запасом
    var i;
    var plugin;
   
    if (isIE) { // browser == IE
        try {
          for (i = 3; i <= lastVersion; i++) {
            if (eval('new ActiveXObject("ShockwaveFlash.ShockwaveFlash.'+i+'")')) {
                  version = i;
            }
          }
        } catch(e) {}
    } else { // browser != IE
        for (i in navigator.plugins) {
            plugin = navigator.plugins[i];
            if (plugin.name == undefined) continue;
            if (plugin.name.indexOf('Flash') > -1) {
                newversion = /\d+/.exec(plugin.description);
                if (newversion == null) newversion = 0;
                if (newversion> version) version = newversion;
            }
        }
    }
    return version;
}

Итак, всё просто. Вызвали функцию — она вернула либо версию, либо 0, в случае отсутствия флеша.

(4 мая 2011 г. в код внесены исправления для поддержки 10-й версии Adobe FlashPlayer) - by 1234ru)


© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.
Статьи, часто просматриваемые вместе с этой:
Прелоад изображений
Ловим скролл
Как сделать иерархическое меню?
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
NO USERPIC

aleks_raiden

супер! только не так давно искал как выяснить версию, было нужно.. жаль не нашел этого текста тогда!
14.05.2008, 23:45
Ответить

bur

С вопросами подобного рода обращайтесь к нам. Не стесняйтесь оставлять сообщения в любом интересующем разделе ;-)
Fastcoder.org — портал для JavaScrpt-программистов
15.05.2008, 09:49
Ответить
NO USERPIC

lumega

для определения версии браузера и другого сделал уже давно вот этот сервис
http://neorex.ru/whoiam/
06.06.2008, 19:21
Ответить

bur

Сервис, к сожалению, не помогает в работе с пользователями.
А для определения версии флеша там используется стандартный эдабовcкий скрипт, работающий по тому же принципу. Кстати, надо на него ссылку дать:
Flash Player Detection Kit
Fastcoder.org — портал для JavaScrpt-программистов
06.06.2008, 19:37
Ответить
NO USERPIC

new_forward

У меня стоит 10 плеер в ИЕ 10 показывает а в хроме, мозиле, опере показывает 1...Как сделать чтоб тоже 10 показывало...?
10.04.2011, 21:17
Ответить

1234ru

Попробуйте вот так:

function flashVersion() {
    // Отдельно определяем Internet Explorer
    var ua = navigator.userAgent.toLowerCase();
    var isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1);
    // Стартовые переменные
    var version = 0;
    var lastVersion = 10; // c запасом
    var i;
    if (isIE) { // browser == IE
        try {
          for (i = 3; i <= lastVersion; i++) {
            if (eval('new ActiveXObject("ShockwaveFlash.ShockwaveFlash.'+i+'")')) {
                  version = i;
            }
          }
        } catch(e) {}
    } else { // browser != IE
        for (i in navigator.plugins) {
            var plugin = navigator.plugins[i].name;
            if (plugin == undefined) continue;
            if (plugin.indexOf('Flash') > -1) {
                var version = /\d+/.exec(plugin);
                if (version == null) version = 0;
            }
        }
    }
    return version;
}


Правда такое впечатление, что в браузерах, кроме IE, сейчас имя плагина - ShockWave Flash, т.е. без номера версии.
То, что не убивает нас, делает нас инвалидами.
13.04.2011, 00:36
Ответить
NO USERPIC

rgbeast

Теперь в мозилле версия хранится отдельно от имени плагина. Протестируйте такое в других браузерах:

function flashVersion() {
    // Отдельно определяем Internet Explorer
    var ua = navigator.userAgent.toLowerCase();
    var isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1);
    // Стартовые переменные
    var version = 0;
    var lastVersion = 10; // c запасом
    var i;
    if (isIE) { // browser == IE
        try {
          for (i = 3; i <= lastVersion; i++) {
            if (eval('new ActiveXObject("ShockwaveFlash.ShockwaveFlash.'+i+'")')) {
                  version = i;
            }
          }
        } catch(e) {}
    } else { // browser != IE
        for (i in navigator.plugins) {
            var plugin = navigator.plugins[i].name;
            if (plugin == undefined) continue;
            if (plugin.indexOf('Flash') > -1) {
                var version = /\d+/.exec(navigator.plugins[i].version);
                if (version == null) version = 0;
            }
        }
    }
    return version;
}
13.04.2011, 01:39
Ответить

1234ru

Как оказалось, отдельно версия хранится только в firefox, в остальных — нет.
Универсальным для Chrome, Firefox и Opera является использование параметра description: в отличие от version он есть во всех трёх браузерах:

function flashVersion() {
    // Отдельно определяем Internet Explorer
    var ua = navigator.userAgent.toLowerCase();
    var isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1);
    // Стартовые переменные
    var version = 0;
    var lastVersion = 10; // c запасом
    var i;
    var plugin;
    if (isIE) { // browser == IE
        try {
          for (i = 3; i <= lastVersion; i++) {
            if (eval('new ActiveXObject("ShockwaveFlash.ShockwaveFlash.'+i+'")')) {
                  version = i;
            }
          }
        } catch(e) {}
    } else { // browser != IE
        for (i in navigator.plugins) {
            plugin = navigator.plugins[i];
            if (plugin.name == undefined) continue;
            if (plugin.name.indexOf('Flash') > -1) {
                version = /\d+/.exec(plugin.description);
                if (version == null) version = 0;
            }
        }
    }
    return version;
}


То, что не убивает нас, делает нас инвалидами.
13.04.2011, 12:10
Ответить
NO USERPIC

rgbeast

В этом решении потерялась обработка нескольких потенциальных плагинов и получения максимальной версии.

       for (i in navigator.plugins) {
            plugin = navigator.plugins[i];
            if (plugin.name == undefined) continue;
            if (plugin.name.indexOf('Flash') > -1) {
                var newversion = /\d+/.exec(plugin.description);
                if (newversion == null) newversion = 0;
                if (newversion> version) version=newversion;
            }
        }

13.04.2011, 12:21
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2007—2012 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100