Магазин портативной техники "Портатив"
:: на главную
Flash > Неожиданные применения Flash

В восьмом кадре сделаем:

Go to and Stop (var)

В девятом кадре:

Get URL ("flash3.html")

Причем впишем flash3.html без с кавычек в окошко Get URL c установленной опцией "String Literal". Вот так

Кликните для увеличения!

и десятому кадру присвоим метку "end" и действие

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=2 HEIGHT=2 TYPE="application/x-shockwave-flash">
</embed>
</object>
</body>
</html>

Невооруженным глазом видно, что из исходного текста удалены все url, принудительно выставлены размеры ролика 1х1 (реальный размер .swf может быть любым) и в заголовке появилась строчка насчет HTTP-EQUIV="Refresh" (переход на nonflash.html через 4секунды).
Посмотрим теперь, как это все работает.
Предположим, что на страничку зашел пользователь с полноценной поддержкой Flash4. Тогда он будет практически моментально перенаправлен на flash4.html из действия внутри 2-го кадра. 8-й кадр в этом случае является страховочным. Ecли коннект хреновый и за время попытки уйти на flash4.html дело дойдет до 8-го кадра, девятый будет перепрыгнут и дожидаться выполнения действия из второго кадра ролик будет находясь в 10-м. Если же плугин у посетителя устаревший, то он не поймет этих двух переходов и, соответственно, пойдет дальше и будет перенаправлен на flash3.html в девятом кадре. Необходимо заметить, что некоторые методы определения версии плугина, на основе циклов, работают неустойчиво - трудно предсказать реакцию Flash3-плугина на действия внутри циклов if - к сожалению, в разных условиях реакция получается разная. Если вам больше нравятся исторические но очень проверенные методы, можно использовать что-то вроде вот этого .fla. Далее, если браузер посетителя вообще не знает что такое .swf, через 4секунды сработает мина замедленного действия из заголовка и посетитель будет переброшен на nonflash.html чтобы полюбоваться там, на чисто текстовый вариант вашего сайта. Работа всей этой комбинации основана на том, что перенаправление по "Frame Action" из .swf происходит быстрее, чем срабатывает "Refresh" в заголовке. Время перехода указанное в строке <meta... может зависеть от множества параметров, главным из которых является скорость вашего сервера. В большинстве случаев 2-3 секунд вполне достаточно для ухода на нужную страницу по Frame Action, поэтому тут используются 4 секунды. Размеры ролика уменьшены до точки по одной простой причине - например IE, при обнаружении неизвестного объекта предлагает перейти на страницу для "поиска ..." чего-то там. Но переход этот осуществляется только после щелчка на пустом окошке из-под объекта, а на окошко размером 1х1 щелкнуть тяжеловато :)
В этом процессе есть еще одна тонкость - если кто-то зайдет на вашу страничку сначала броузером без поддержки Flash и потом, установив эту поддержку, попытается еще раз, он может быть снова переброшен на nonflash.html из-за наличия кэша браузера. Я пока не вижу никаких способов надежно обойти эту проблему без использования Cookies. Не имеет смысла именно здесь ударятся в описание того как это сделать - хороших руководств по ява-скрипту много. Но я например пробовал записывать Cookie скриптом из nonflash.html, а в заголовке detection.html пытался прочитать Cookie и в случае его обнаружения убивал Cookie и в заголовке подставлял...(нажмите "дальше")
<< назад содержание вперед >>