чудо{вищные} заметки

Sorry for my terrible english. My native language is PHP.

Flash ActiveX & IE update

Ну наверное для многих не новость, что после очередного апдейта IE (6), начались проблемы с Flash-ем (впрочем не только с ним…) — вокруг означенного флэша появилась пренеприятнейшая рамка и tooltip с напоминанием о том, что надо кликнуть на объект, чтобы его активировать…

UPDATE2:

Модификация Internet Explorer должна решить проблему нарушения корпорацией Microsoft патента фирмы Eolas на технологию взаимодействия пользователя с интерактивным контентом, внедрённым в веб-страницы.

Вот собственно где собака порылась — теперь не M$ нарушает американские патенты — теперь из буду нарушать я ;o)
Умные люди нашли выход — вставлять флэш через JS.

Я этот метод в принципе одобряю — как-никак спасение… но править добрую полсотню сайтов, искать там банеры и прочий активный контент и заменять вставку swf-ок на flashobject … это путь для самурая — я пошёл другим путём — нахожу все object-ы c нужным classid и тупо переписываю obj.outerHTML = obj.outerHTML

И что интересно — это работает! Но… но вот FlashVars почему-то теряются(кто видел, какой innerHTML генерит IE для flash-а, тот наверное понимает о чём я..

Пришлось топорным методом сохранять flashvars из param заменять его в outerHTML перед записью.

Итого:

function initFlashObj() {
var objs = document.getElementsByTagName(‘object’);
if (objs && objs.length) {
for (var i = 0; i < objs.length; i++) {
if (objs[i].getAttribute(‘classid’) == ‘clsid:d27cdb6e-ae6d-11cf-96b8-444553540000’) {
var params = objs[i].getElementsByTagName(‘PARAM’);
for (var j = 0; j < params.length; j++) {
if (params[j].getAttribute(‘name’) == ‘flashvars’) {
var FlashVars = params[j].getAttribute(‘value’);
break;
}
}
var obj = objs[i].outerHTML + «\n»;
obj = obj.replace(/FLASHVARS» VALUE=»»/i,’FLASHVARS» value=»‘+FlashVars+'»‘);
objs[i].outerHTML = obj;
}
}
objs = null;
}
}

Остаётся добавить эту функцию на window.onload и всё…
Особо пытливые могут попытаться оптимизировать геморой с replace и тогда всем будет всемирное счастье..

P.S.
Пишу это второй раз — какие-то неполадки(сам заметил, что с кодировкой что-то не то) на wordpress-е — видимо они восстановились из бэкапа…

UPDATE:

А вот ещё один дядя сделал тоже самое (не учтя «проблему» с flashvars) и судя по дате додумался в тот же день, что и я ;o)

Часть II

Часть III  (Издание 2-ое — дополненное и исправленное)

Technorati Tags: , , ,

Реклама

Апрель 14, 2006 - Posted by | DailyWTF, dev, flash, js, web

8 комментариев »

  1. в DOM нет такого атрибута — outerHTML — следовательно, работать будет только в ИЕ :)

    комментарий от anton | Апрель 17, 2006

  2. Я даже больше скажу — это только в IE есть ActiveX, с которыми возникли проблемы после апдейта от M$ ;o)
    Так что 5 за знание DOM и 3 за внимательность ;o)

    комментарий от MiRacLe | Апрель 17, 2006

  3. вконец охуели эти пидоры из microsoft. путь для самурая — мягко сказано. у меня в одном сайте порядка сотни страниц, на каждой по нескольку объектов, всего сайтов штук 20, потребуется несколько тысяч замен, чтобы вернуть всё на место — и это всё надо будет потом тщательно перепроверять, страницу за страницей, если по уму..

    комментарий от Waso | Апрель 17, 2006

  4. 2Waso: как обычно — "хотели как лучше, получилось как всегда"

    так что пару сотен страниц править придётся только если файлы статичные (*.html), а если на сервере есть php (и он установлен как mod_php), то "есть способ лучше" — делаешь 2 записи в .htaccess:

    AddType application/x-httpd-php .html .htm
    php_value auto_prepend_file header_for_all_html.php

    а в файле header_for_all_html.php написать:
    <?php
    //Опционально сделать проверку на (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE') !== false)
    echo '<script language="JavaScript" type="text/javascript" src="/path/to/super_puper_flash_updater.js"></script>';
    ?>
    в файле super_puper_flash_updater.js надо вписать код, приведённый в посте.

    С одной стороны все html-ки получившиеся в рузультате станут невалидными с точки зрения w3c-валидатора (вопрос о том кому это надо по сей день остаётся открытым), с другой стороны не придётся менять "порядка сотни страниц"… Выбирать тебе…

    комментарий от MiRacLe | Апрель 17, 2006

  5. Спасибо за мысли… Экспериментирую, но с JS у меня несильно хорошо, потому методом тыка ))
    Пока что добился лишь того (вставив твой код в страницу на onLoad, как велено), что на флешке (первой из трех на странице) — фокус и альт «press ENTER or SPACE for activate…». Это при НЕнаведенной мышке… Бред какой-то.
    Продолжаем эксперимент ))

    комментарий от Mimohod | Апрель 20, 2006

  6. 2Mimohod:
    За мысли всегда пожалуйста — приходите ещё :)
    вот рабочий код link updated — пользуйтесь на здоровье…

    комментарий от MiRacLe | Апрель 20, 2006

  7. UPDATE:
    вот новый код link updated — теперь работает в IE 5 и 5.5 (проблема с object.getElementsByTagName(‘param’) и flashvars теперь добавляются(переписываются) только если они найдены…

    комментарий от MiRacLe | Апрель 21, 2006

  8. […] Сперва обнаружилось, что код, который я приводил в прошлом посте не работает в IE версий ниже 6-ой (точнее он работал, но не совсем так как задумано ;o) ) . Пришлось его немного подточить — flashvars теперь беруться не из тега PARAM, а из свойства altHTML у тега OBJECT (это свойство доступно только в IE и содержит html код с тегом EMBED), и вот код работает в IE 5.5 и IE5… но… […]

    Уведомление от Я проcто Чудо {вище} » Blog Archive » Flash, ActiveX & IE update. part II | Апрель 24, 2006


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: