Флеш на сайте и корпоративный файервол.

Вчера наткнулся на статью Сергея Чикуёнка – “Почему сайты на флэше — это плохо“. Мысль Сергея понятна и я ее абсолютно поддерживаю, однако меня обеспокоила одна из причин, по которой Сергей считает  флэш – злом. Суть ее в том, что злые админы крупных (и не очень) компаний блокируют 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. Я не сомневаюсь в том, что аналогичные решения возникали и у разработчиков студии Лебедева, но они по каким-либо причинам решили их не использовать.**
**




Share this story