|
|
Неожиданные применения Flash
Итак, начнем сначала с неказистых и общеизвестных задачек.
1. Определение версии браузера и Flash-плугина.
Главным инструментом Flash во всех не графических действиях являются переменные
и "Frames Actions". Давайте попробуем применить эти инструменты
для простой задачки:
Set Variable: "ok" = "fl_4" Go to and Stop (ok)второму:
Get URL ("flash3.html") Stopи третьему кадру присвоим Label fl_4 и действие:
Get URL ("flash4.html") StopПосле этого проэкспортируем эти три кадра в .swf (тут я назвал его index.swf и получился он весом около 130 байт) и, открыв в каком-либо редакторе .html файл, получившийся после "Publish", внесем в него небольшие изменения.
<html>
<head>
<title>Detection</title>
<meta HTTP-EQUIV="Refresh" CONTENT="4;URL=nonflash.html">
</head>
<body bgcolor="#000000">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ID=index WIDTH=1 HEIGHT=1>
<param NAME=movie VALUE="index.swf">
<param NAME=quality VALUE=high>
<param NAME=bgcolor VALUE=#000000>
<embed src="index.swf" quality=high bgcolor=#0000
WIDTH=1 HEIGHT=1 TYPE="application/x-shockwave-flash">
</embed>
</object>
</body>
</html>
Невооруженным глазом видно, что из исходного текста удалены все url, принудительно
выставлены размеры ролика 1х1 (реальный размер .swf может быть любым) и в
заголовке появилась строчка насчет HTTP-EQUIV="Refresh"
(переход на nonflash.html через 4секунды).
Посмотрим теперь, как это все работает.
Предположим, что на страничку зашел пользователь с полноценной поддержкой
Flash4. Тогда он будет практически моментально перенаправлен на flash4.html
из действия внутри 3-го кадра, куда он попадет из первого кадра, по действию
перехода на кадр с меткой fl_4. Если же плугин
у посетителя устаревший, то он не поймет этого перехода и, соответственно,
пойдет дальше и будет перенаправлен на flash3.html во
втором кадре. Необходимо заметить, что некоторые 2-х кадровые методы определения
версии плугина, на основе циклов, работают неустойчиво - трудно предсказать
реакцию Flash3-плугина на действия внутри циклов if
- к сожалению, в разных условиях реакция получается разная.
Ну а если браузер посетителя вообще не знает что такое .swf, через 4секунды
сработает мина замедленного действия из заголовка и посетитель будет переброшен
на nonflash.html чтобы полюбоваться там, на чисто
текстовый вариант вашего сайта. Работа всей этой комбинации основана на том,
что перенаправление по "Frame Action" из .swf происходит быстрее,
чем срабатывает "Refresh" в заголовке. Время перехода указанное
в строке <meta... может зависеть от множества
параметров, главным из которых является скорость вашего сервера. В большинстве
случаев 2-3 секунд вполне достаточно для ухода на нужную страницу по Frame
Action, поэтому тут используются 4 секунды. Размеры ролика уменьшены до точки
по одной простой причине - например IE, при обнаружении неизвестного объекта
предлагает перейти на страницу для "поиска ..." чего-то там. Но
переход этот осуществляется только после щелчка на пустом окошке из-под объекта,
а на окошко размером 1х1 щелкнуть тяжеловато :) Теперь нам остается поприветствовать
пользователей IE на flash4.html и это уж сделать
совсем просто. В исходный код flash4.html добавим
несколько знаков:
вместо
<param NAME=movie VALUE="main.swf">сделаем
<param NAME=movie VALUE="main.swf?ie=1">После этого добавим в основную сцену main.swf объект типа "Символ" вида "Movie Clip" c Instance Name hi содержащий текст приветствия и в первый кадр добавим следующее действие
If (ie=1) Set Property ("/hi", Visibility) = "1" Else Set Property ("/hi", Visibility) = "0" End If
Таким образом при заходе на эту страничку эксплорером из исходного текста
html в swf будет передана переменная ie со значением
1, а если посетитель использует NN эта переменная не будет передана в swf
(ну не понимает NN тэга <object... :) Соответственно
в первом кадре, после проверки равенства ie=1,
будет принято решение насчет видимости или невидимости приветствия.
На этом в принципе задачу можно считать решенной. Не знаю кому как, а мне
например этот способ кажется значительно проще чем стандартный ява-скриптовский
:)
PS: Только не нужно думать, что я агитирую за запрет автоустановки плугина
в IE - это просто такая задача попалась для примера :) Хотя, в принципе, иногда
такой запрет может быть полезен.
On (Release, Release Outside) If (Pass eq "truepass") Go to and Play ("Welcome") Else If (n>3) Go to and Play ("Sorry - you are wrong") Else If (n eq "") Set Variable: "n" = "1" Else If (0 < n < 3) Set Variable: "n" = n+1 End If End On
Очень легко увидеть, что при правильно введенном пароле (слово "truepass"
в поле ввода (само собой без кавычек :)) посетитель будет перенаправлен на
ключевой кадр с меткой Welcome, а после пятой
неправильной попытки - на метку Sorry - you are wrong.
Для пущей защищенности не следует вводить правильное слово в поле ввода по
умолчанию :) Кроме того, можно основное содержание подгружать из дополнительного
.swf действием Load Movie из кадра с меткой Welcome.
Причем действие это лучше привязать к нажатию кнопки - действия кнопок немножко
сложнее вычислить, не имея исходника. Особенно если перед проверкой с введенным
словом производятся какие-нибудь арифметические или логические операции, а
имя загружаемого ролика передавать в виде переменной.
Пожалуй, пока хватит :) Пора перейти от этих тривиальных задачек к чему-нибудь поинтереснее. Далее мы поговорим об определении быстродействия компьютера посетителя флэшовой странички, об оценке качества его соединения с интернетом, об "удаленном администрировании" своей странички, о том, как Flash может облегчить жизнь держателей варезных сайтов, о попытках подменить некоторые функции Cookes, о сургуче, снарках и наконец о ремонте некоторых неисправностей карданного вала методами Flash :) Но это все можно будет узнать только на следующей страничке...