Замена Flash картинкой
Похожий вопрос уже задавался, но четкого ответа на него не прозвучало.
Если у пользователя отключено проигрывание Flash с целью обезопасить себя от потенциальных вирусов, то как в этом случае заменить Flash на картинку (gif или jpg )? У меня стоит Flash MX 2004. И вопрос- продолжение. Эта картинка представляет из себя шапку с меню(никоем образом неразделимые). Если ею заменить Flash, то можно ли будет ее по частям вставить в таблицу?
Заранее спасибо.
Похожий вопрос уже задавался, но четкого ответа на него не прозвучало.
Читали тему " Наличие Flash-плагина " ?
Если ею заменить Flash, то можно ли будет ее по частям вставить в таблицу?
Не совсем понятен вопрос.
Вы про то, чтобы разрезать картинку? Если да, то какие проблемы? Тот же photoshop или imageready то сделают без проблем.
Как я поняла, в случае отсутствия flash, пользователь отправится на аналогичную страницу, но без анимации. А мне хотелось бы узнать, как обойтись без дублирования страниц(т.к. flash представляет собой только часть страницы, а не сайт целиком)?
В связи с этим и был задан следующий вопрос про таблицу. Нарезать - это не проблема. Вопрос в том, можно ли это будет сделать, если этой картинкой заменить flash? Т.е. получается, что вместо 1 картинки я вставляю несколько.
Человеческое решение проблемы, как я его вижу:
На каждой странице имеем следующий HTML и JS:
<div id="flash">
<!-- Здесь флэш (object/embed) -->
</div>
<div id="noflash" style="display: none;">
<!-- Здесь таблица с картинками -->
</div>
<script type="text/javascript">
var cPos = document.cookie.indexOf('flash='); // Заданы ли куки?
var flashDetectTimer = null;
if (cPos >= 0) {
var value = document.cookie.substr(cPos+6, 1); // flash = 1 или 0 ?
if (!value) noFlash(); // если 0, то показать альтернативу флэшу
} else {
flashDetectTimer = setTimeout(detectTimeout, 10000); // 10 секунд на размышление
}
// Эта функция вызовется, если из флэша не было сигнала о отм, что он загружен
function detectTimeout() {
document.cookie = 'flash=0';
noFlash();
}
// Эта функция вызовется из флэша о чем сигнализирует о своем наличии
function flashResponse() {
if (flashDetectTimer) clearTimeout(flashDetectTimer);
document.cookie = 'flash=1';
}
// Эта функция выведет хтмл, который соответствует отключенному флэш
function noFlash() {
document.getElementById('flash').style.display = 'none';
document.getElementById('noflash').style.display = 'block';
}
</script>
Скрипт желательно вынести во внешний файл.
Ну и напоследок, самое главное, это не забыть в первом кадре вашего флэш выполнить команду: getURL('javascript:flashResponse();') дабы сообщить о своем присутствии в JS. Эта строка должна быть выполнена самой первой, желательно до того, как на сцене Flash появятся какие-либо объекты, ибо время на то, чтобы загрузился первый кадр флэш дано не слишком большое - 10 сек. Если флэш будет большим по размеру, то может сработать таймаут и показаться пользователю не то, что надо.
Данное решение хорошо еще тем, что такую страницу можно будет сохранять и просматривать, скрипт будет правильно определять наличие флэша и отображать соотв. контент.
Вот такой вот чудо-скрипт. Должен работать. Надеюсь, что утром не буду сожалеть о написанном ;) Голова уже тяжелая.
Сделал, выложил в сеть
Исходные файлы также можно скачать
Я действительно допустил ошибку в коде. Прошу простить.
Вместо:
document.getElementById('flash').display = 'none';
document.getElementById('noflash').display = 'block';
стоило писать:
document.getElementById('flash').style.display = 'none';
document.getElementById('noflash').style.display = 'block';
Дабы не смущать никого, в раннем посте я ее исправил.
О подходе, который я использовал для определения Flash:
Сейчас предполагается наличие флэш, в случае неудачи показывается альтернатива (в принципе, логику можно поменять с точностью до наоборот - тоже вариант, кому как нравится)
Плюсы:
+ Если страницу сохранить на диск, то сохранится и флэш, и альтернатива ему и при просмотре на локальной машине покажется нужный блок
+ Флэш определяется довольно надежно и в большинстве браузеров
+ После доработки небольшой, изменения, касающиеся флэша минимальны, а именно - это содержание в своем проекте очень маленького символа в библиотеке, который сам загрузиться первым и выполнит нужный код.
+ Относительная простота использования данного подхода
Минусы:
- Флэш может не определиться из-за медленного канала, но это произойдет только на первой странице (на последующих страницах уже будет показан Flash, стабильно) (Можно сделать так, чтобы как только загрузится флэш, возвращать его на место, это не сложно - лишнии две строки написать, но по-моему немного странным будет то, что сначала пользователь увидел пустоту, через 5-10 сек он увидел картинки (возможно недогруженные), а еще через некоторое время картинки заменятся флэшем. Хотя... с другой стороны это только для медленного коннекта и один раз)
- До истечения тайм-аута (сейчас это 5 сек.), если у пользователя нет Flash, то он видит пустое поле.
- Если пользователь включит или выключит Flash во время серфинга (уже после того, как наличие Flash определилось), то ему будет показываться не то, что нужно (Это связано с запоминанием статуса, использованием кук). Это можно исправить, но не нужно, ибо определять каждый раз - зло.
да, если куку не пускать - говорит "не судьба"..
Ну если куку не пускать, то на большинство сайтов вообще не получится зайти (форумы, магазины) :)
Это уже из разряда продвинутых (задвинутых) пользователей :)
ну, тоже верно :)
javascript: (с каких бы это пор?), что для меня, признаться, новость.
Путем головоломания, безрезультатным поискам по гуглу и плясками с бубном я решил проблему Gecko :)
Дело было в том, что нельзя передавать русские символы в getURL, коими я имел неосторожность воспользоваться для сообщения при условии, что функция
flashResponse не найдена.Я обновил файлы, пользуйтесь :)
И ещё небольшой вопрос не по теме. Не подскажите ли Вы, как в FireFox'се Flash отключить( с этим браузером столкнулась недавно и никак не могу найти нужного пункта меню :( )?
Да нет же, все должно работать. Просто Вы, похоже, не подождали 5 секунд (или сколько там установили). Поскольку кук нет, то и проверка осуществляется каждый раз, соответственно, ожидается таймаут.
По поводу файрфокса лучше не здесь спрашивать. Я не знаю.
Обновите .js файл и все. Проблем быть не должно.
А, черт!
Простите меня, засранца. Столько времени себе и Вам компостировал мозги.
Эта проблема, о которой мне нужно было вспомнить в самом начале.
Дело в том, что при вызове getURL() (в нашем случае getURL('javascript:...')) из флэш останавливается вся анимация, все загрузки, поскольку браузер считает, что осуществляется переход на другую страницу (есть другие методы для вызова JS из Flash, но надежность невелика, да и см. ниже).
Самое время все бросить и использовать код от 6-го флэш, описанный здесь: Наличие Flash-плагина
Конечно, можно попытаться обойти проблему, с которой мы столкнулись с помощью спрятанного фрейма, но, по-моему, уже хватит изврата.
Может конечно поздно что либо писать, но чисто для прояснения ситуации. Из всего вышенаписанного я не понял, почему нельзя просто внутри тегов OBJECT после всех <PARAM> вставить альтернативное отображение ?
Элемент OBJECT обеспечивает включение в документ различных объектов. Он может содержаться в заголовке документа и любых текстовых и блочных элементах, кроме PRE. Его содержимым являются элементы PARAM, за которыми могут следовать текстовые или блочные элементы. При этом все элементы, следующие за элементами PARAM, задают альтернативное содержание, которое должно отображаться, если обозреватель не поддерживает данный тип объектов.
ИМХО,это куда проще чем используемый JS, тем более что он может быть отключен.
![[logo]](/site/images/logo.jpg)