Xpoint
   [напомнить пароль]

Замена Flash картинкой

2004-12-25 00:28:45 [обр] Tasha [досье]
Добрый вечер.
Похожий вопрос уже задавался, но четкого ответа на него не прозвучало.
Если у пользователя отключено проигрывание Flash с целью обезопасить себя от потенциальных вирусов, то как в этом случае заменить Flash на картинку (gif или jpg )? У меня стоит Flash MX 2004. И вопрос- продолжение. Эта картинка представляет из себя шапку с меню(никоем образом неразделимые). Если ею заменить Flash, то можно ли будет ее по частям вставить в таблицу?
Заранее спасибо.
спустя 11 часов [обр] Алексей В. Иванов [досье]
Похожий вопрос уже задавался, но четкого ответа на него не прозвучало.

Читали тему " Наличие Flash-плагина " ?

Если ею заменить Flash, то можно ли будет ее по частям вставить в таблицу?

Не совсем понятен вопрос.
Вы про то, чтобы разрезать картинку? Если да, то какие проблемы? Тот же photoshop или imageready то сделают без проблем.

спустя 11 часов [обр] Tasha [досье]
Про тему «наличие плагина». Читала. Еще читала «gif вместо flash». Поэтому и написала, что у меня МХ 2004.
Как я поняла, в случае отсутствия flash, пользователь отправится на аналогичную страницу, но без анимации. А мне хотелось бы узнать, как обойтись без дублирования страниц(т.к. flash представляет собой только часть страницы, а не сайт целиком)?
В связи с этим и был задан следующий вопрос про таблицу. Нарезать - это не проблема. Вопрос в том, можно ли это будет сделать, если этой картинкой заменить flash? Т.е. получается, что вместо 1 картинки я вставляю несколько.
спустя 1 час 59 минут [обр] Алексей В. Иванов [досье]

Человеческое решение проблемы, как я его вижу:
На каждой странице имеем следующий 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 сек. Если флэш будет большим по размеру, то может сработать таймаут и показаться пользователю не то, что надо.

Данное решение хорошо еще тем, что такую страницу можно будет сохранять и просматривать, скрипт будет правильно определять наличие флэша и отображать соотв. контент.

Вот такой вот чудо-скрипт. Должен работать. Надеюсь, что утром не буду сожалеть о написанном ;) Голова уже тяжелая.

спустя 2 дня 16 часов [обр] Tasha [досье]
Добрый день. Не работает это никак. Старалась, разбиралась, но всё равно никак. Может, надо учитывать еще какой-нибудь обязательный момент, например при объявлении флэша?
спустя 14 минут [обр] Алексей В. Иванов [досье]
Проверял, работает. Если удастся, сегодня ночью выложу рабочий пример.
спустя 3 часа 41 минуту [обр] Tasha [досье]
Было бы замечательно. Заранее спасибо.
спустя 3 часа 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 определилось), то ему будет показываться не то, что нужно (Это связано с запоминанием статуса, использованием кук). Это можно исправить, но не нужно, ибо определять каждый раз - зло.

спустя 8 часов [обр] Евгений Бондарев aka Eugene Bond [досье]
Алексей В. Иванов[досье]
да, если куку не пускать - говорит "не судьба"..
спустя 57 минут [обр] Алексей В. Иванов [досье]
Евгений Бондарев aka Eugene Bond[досье]
Ну если куку не пускать, то на большинство сайтов вообще не получится зайти (форумы, магазины) :)
Это уже из разряда продвинутых (задвинутых) пользователей :)
спустя 21 минуту [обр] Евгений Бондарев aka Eugene Bond [досье]
Алексей В. Иванов[досье]
ну, тоже верно :)
спустя 1 час 44 минуты [обр] Алексей В. Иванов [досье]
Я по-моему схожу с ума. Пример, что я привел не работает на Firefox (после 5 сек. показывает лажу). Все из-за того, что не вызывается javascript: (с каких бы это пор?), что для меня, признаться, новость.
спустя 2 часа 42 минуты [обр] Алексей В. Иванов [досье]
Все!
Путем головоломания, безрезультатным поискам по гуглу и плясками с бубном я решил проблему Gecko :)
Дело было в том, что нельзя передавать русские символы в getURL, коими я имел неосторожность воспользоваться для сообщения при условии, что функция flashResponse не найдена.
Я обновил файлы, пользуйтесь :)
спустя 6 дней [обр] Tasha [досье]
Большое спасибо, Вы меня очень выручили.
спустя 1 день 19 часов [обр] Tasha [досье]
Возникла проблема с куками. Получается, что если у нас имеются куки, но они не флэш, то ничего и не загружается.
спустя 18 минут [обр] Алексей В. Иванов [досье]
Если куки есть, но флэш не определился, то всегда будет показываться альтернативный вариант (с картинками, например).
спустя 1 день 21 час [обр] Tasha [досье]
В том-то и дело, что нет. После первой загрузки показываются картинки, а после обновления- ничего. Если закомментировать часть кода с куками, то все работает.
И ещё небольшой вопрос не по теме. Не подскажите ли Вы, как в FireFox'се Flash отключить( с этим браузером столкнулась недавно и никак не могу найти нужного пункта меню :( )?
спустя 16 минут [обр] Алексей В. Иванов [досье]

Да нет же, все должно работать. Просто Вы, похоже, не подождали 5 секунд (или сколько там установили). Поскольку кук нет, то и проверка осуществляется каждый раз, соответственно, ожидается таймаут.

По поводу файрфокса лучше не здесь спрашивать. Я не знаю.

спустя 9 минут [обр] Алексей В. Иванов [досье]
Я, кажется понял, возможно, есть проблема при включенных куках, но выключенном флэше. Проблема в том, что идет обращение к блокам, которые идут ниже скрипта.
спустя 10 минут [обр] Алексей В. Иванов [досье]
Да, ступил я жутко. Исправленную версию выложил.
Обновите .js файл и все. Проблем быть не должно.
спустя 1 день 7 часов [обр] Tasha [досье]
Забавно в итоге получается. На странице загружается только текст, фон(рисунок) и Flash(или его альтернатива). Больше ничего. На локальном компьютере все в порядке(при отключенном интернете), проблемы возникают при просмотре сайта через WWW. Правда, если нажать правой кнопкой мыши на место предполагаемого изображения(не имеющего отношения к альтернативе флэш) и из контекстного меню выбрать «показать рисунок», он (рисунок т.е.) благополучно загружается.
спустя 5 часов [обр] Алексей В. Иванов [досье]

А, черт!
Простите меня, засранца. Столько времени себе и Вам компостировал мозги.
Эта проблема, о которой мне нужно было вспомнить в самом начале.
Дело в том, что при вызове getURL() (в нашем случае getURL('javascript:...')) из флэш останавливается вся анимация, все загрузки, поскольку браузер считает, что осуществляется переход на другую страницу (есть другие методы для вызова JS из Flash, но надежность невелика, да и см. ниже).

Самое время все бросить и использовать код от 6-го флэш, описанный здесь: Наличие Flash-плагина
Конечно, можно попытаться обойти проблему, с которой мы столкнулись с помощью спрятанного фрейма, но, по-моему, уже хватит изврата.

спустя 21 день [обр] Андрей Пахомов [досье]

Может конечно поздно что либо писать, но чисто для прояснения ситуации. Из всего вышенаписанного я не понял, почему нельзя просто внутри тегов OBJECT после всех <PARAM> вставить альтернативное отображение ?

Элемент OBJECT обеспечивает включение в документ различных объектов. Он может содержаться в заголовке документа и любых текстовых и блочных элементах, кроме PRE. Его содержимым являются элементы PARAM, за которыми могут следовать текстовые или блочные элементы. При этом все элементы, следующие за элементами PARAM, задают альтернативное содержание, которое должно отображаться, если обозреватель не поддерживает данный тип объектов.

ИМХО,это куда проще чем используемый JS, тем более что он может быть отключен.

спустя 5 минут [обр] Алексей В. Иванов [досье]
Одно дело, что написано в спецификации, совсем другое в том, как сейчас работает в IE. Более того, в спецификации тэг OBJECT имеет вовсе другой смысл, нежели в IE.
спустя 6 дней [обр] Tasha [досье]
Код работает и страница загружается целиком, если остальную часть html-кода тоже заключить в дивы, а в JS прописать загрузку этого слоя вместе с альтернативой Flash’у.
Powered by POEM™ Engine Copyright © 2002-2005