Флеш на сайте и корпоративный файервол.
Вчера наткнулся на статью Сергея Чикуёнка – “Почему сайты на флэше — это плохо“. Мысль Сергея понятна и я ее абсолютно поддерживаю, однако меня обеспокоила одна из причин, по которой Сергей считает флэш – злом. Суть ее в том, что злые админы крупных (и не очень) компаний блокируют flash на уровне корпоративного файервола, что доставляет не мало хлопот веб разработчикам. На этот счет у меня есть идея с которой я бы и хотел поделиться с общественностью.
Конечно же flash мы будем вставлять моим любимым swfobject-ом ( кстати на базе swfobject я создал еще более гибкий способ вставки флэша в html страницу, но об этом я расскажу как-нибудь в следующий раз).
Задача.
Детектировать случаи блокировки флэша корпоративным файерволом, в случаи обнаружения подобной ситуации показывать фигу альтернативный контент.
Решение.
Первое, что пришло в голову это использовать давнюю методику, которую я применял для определения наличия флэша у посетителя еще в те времена, когда swfobject еще даже не существовал Суть ее в том, что в страницу встраивается флэшка размером 1х1 пиксель, при загрузке которой она сообщала о своем существовании, в данном случаи она будет общаться с яваскриптом.
Для начала создаем swf файл, который содержит следующий код:
getURL("javascript:firewallDisable();");
Данный листинг вызывает яваскрипт функцию firewallDisable(), которая в свою очередь запустит swfobject код основной флэшки (флэшек). К слову, размер файла-детектора 66 байт. Пример работы данной флэшки, вызывается alert с сообщением о том, что все хорошо Хочу заметить, что данное решение не будет работать в том случаи, если злые админы еще и чистят html от явакрипта.
Мысли вслух: можно во флэш “зашить“* яваскририт код и скармливать его тем, у кого админы чистят javascript средствами фаервола, но при этом оставляют флэш. Да можете считать меня извращенцем, но это будет работать у конечного пользователя
*
Попробуем добавить вторую (основную) флэшку, вот пример того, как это будет работать.
Я создал вторую флэшку под названием test.swf, в первом кадре которой вызываю javascript функцию flashInsert, которая в свою очередь говорит нам о том, что основной swf файл загружен и вставлен на страницу и повторно его пинать вставлять средствами детектора не надо (возможны варианты, когда детектор загрузится после основой флэшки и захочет ее перезаписать, нам ведь это не надо?).
Конечно же всем интересно посмотреть как работает страница когда включен корпоративный файервол, для этих целей я создал еще одну страницу, swf файлы которой имеют нулевой размер.
Конечно данное решение надо еще допиливать для варианта отключенного яваскрипта, но уже не в рамках этой статьи.
P.S. Я не сомневаюсь в том, что аналогичные решения возникали и у разработчиков студии Лебедева, но они по каким-либо причинам решили их не использовать.**
**