Иногда возникают ситуации, когда надо отследить версию используемого пользователем флеш-плеера и на основе этих данных выполнить те или иные действия. Например, ваше флеш-приложение будет использовать возможности, которые появились только в 10-й версии Flash Player и которые не поддерживаются предыдущими версиями (весьма актуальный, я вам скажу, пример). Что же делать в этом случае? Правильно! Надо установить используемую версию флеш-плеера и, если она ниже 10-й, то предложить пользователю обновить свой флеш-плеер.
Казалось бы, всё действительно просто. Ведь и в ActionScript 2.0, и в ActionScript 3.0 есть стандартные методы для определения версии используемого клиентом Flash Player-а.
Код ActionScript 2.0:
import System.capabilities.version;
trace(System.capabilities.version);
и
Код ActionScript 3.0:
import flash.system.Capabilities;
trace(Capabilities.version);
Но не всё так просто. Дело в том, что и System.capabilities.version в ActionScript 2.0, и Capabilities.version в ActionScript 3.0 возвращают данные о флеш-плеере в виде строки примерно следующего содержания::
WIN 10,2,153,2
Здесь сперва указывается информация о платформе, на которой работает данный Flash Player (WIN, MAC или UNIX), а затем идёт подробная информация о версии (причём для большинства случаев эти полные данные избыточны).
Следовательно, чтобы получить информацию о версии флеш-плеера в удобном для нас формате (например, в виде целого числа), придётся разобрать строку на составляющие элементы.
Приступим.
Конечно, для преобразования строки с данными о версии в удобный для нас формат мы можем воспользоваться несколькими разными способами... А в случае с ActionScript 3.0 мы даже можем использовать такой мощный инструмент, как регулярные выражения... Но давайте сделаем это простым и подходящим сразу для двух языков способом... через массив и методы работы с массивами. Конкретно, нам понадобиться такой метод, как split() (он присутствует и в AS 2.0, и в AS 3.0).
Метод split() преобразует объект типа String (строка) в массив (!) подстрок путем разделения объекта String каждый раз, когда встречается заданный параметр-разделитель.
Делаем...
Код ActionScript 2.0:
/*
подключаем класс
*/
import System.capabilities.version;
/*
С помощью метода split() превращаем строку, полученную от Capabilities.version в массив из двух элементов:
- имя платформы;
- полная версия флеш-плеера.
Обратите внимание, что методу split() в качестве параметра передаётся ПРОБЕЛ.
*/
var arr:Array = System.capabilities.version.split(" ");
/*
Теперь мы можем отдельно вывести название платформы.
*/
trace("Платформа: " + arr[0]);
/*
А во второй ячейке массива у нас хранится полная версия флеш-плеера.
*/
trace("Полные данные о версии плеера: " + arr[1]);
/*
Но полная версия нам не нужна. Поэтому мы её "округлим".
Для этого снова воспользуемся методом split(), которому в качестве параметра укажем ЗАПЯТУЮ.
*/
arr = arr[1].split(",");
/*
А теперь вытаскиваем "округлённую" версию и превращаем её в число (это необходимо для последующего сравнения).
*/
trace("Версия: " + parseInt(arr[0],10))
Примерно также код будет выглядеть и для ActionScript 3.0:
Код ActionScript 3.0:
/*
подключаем класс
*/
import flash.system.Capabilities;
/*
С помощью метода split() превращаем строку, полученную от Capabilities.version в массив из двух элементов:
- имя платформы;
- полная версия флеш-плеера.
Обратите внимание, что методу split() в качестве параметра передаётся ПРОБЕЛ.
*/
var arr:Array = Capabilities.version.split(" ");
/*
Теперь мы можем отдельно вывести название платформы.
*/
trace("Платформа: " + arr[0]);
/*
А во второй ячейке массива у нас хранится полная версия флеш-плеера.
*/
trace("Полные данные о версии плеера: " + arr[1]);
/*
Но полная версия нам не нужна. Поэтому мы её "округлим".
Для этого снова воспользуемся методом split(), которому в качестве параметра укажем ЗАПЯТУЮ.
*/
arr = arr[1].split(",");
/*
А теперь вытаскиваем "округлённую" версию и превращаем её в число (это необходимо для последующего сравнения).
*/
trace("Версия: " + parseInt(arr[0],10))
Думаю, код достаточно подробно прокомментирован и объяснять более его не надо.
Теперь давайте проверим, принадлежит ли флеш-плеер к 10-й и более поздним версиям. По результатам проверки выведем соответствующие сообщения.
Код ActionScript 2.0:
import System.capabilities.version;
var arr:Array = System.capabilities.version.split(" ");
arr = arr[1].split(",");
/*
В данной переменной будем хранить минимально допустимую для нашего приложения версию флеш-плеера.
*/
var v:Number = 10;
/*
Проверяем версию флеш-плеера.
*/
if (parseInt(arr[0],10) >= V)
{
trace("Поздравляю! У Вас установлен нужный флеш-плеер.");
}
else
{
trace("Ваш флеш-плеер устарел. Пожалуйста, обновите Flash Player.");
}
и
Код ActionScript 3.0:
import flash.system.Capabilities;
var arr:Array = Capabilities.version.split(" ");
arr = arr[1].split(",");
/*
В данной константе будем хранить минимально допустимую для нашего приложения версию флеш-плеера.
*/
const V:uint = 10;
/*
Проверяем версию флеш-плеера.
*/
if (parseInt(arr[0],10) >= V)
{
trace("Поздравляю! У Вас установлен нужный флеш-плеер.");
}
else
{
trace("Ваш флеш-плеер устарел. Пожалуйста, обновите Flash Player.");
}
Естественно, что на практике трассировка будет заменена каким-то кодом (переход на определённый кадр, вывод сообщения или запуск определённой функции). Но принцип, я думаю понятен.
Для наглядности привожу флеш-ролик, который выполняет только одну единственную функцию - отображает данные о вашем флеш-плеере.
Здесь используется тот же код, что и выше, но данные выводятся не через трассировку, а через текстовое поле.