Ну наверное для многих не новость, что после очередного апдейта 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)
Часть III (Издание 2-ое – дополненное и исправленное)
Technorati Tags: flash, ie, activeX, js
в DOM нет такого атрибута – outerHTML – следовательно, работать будет только в ИЕ 🙂
Я даже больше скажу – это только в IE есть ActiveX, с которыми возникли проблемы после апдейта от M$ ;o)
Так что 5 за знание DOM и 3 за внимательность ;o)
вконец охуели эти пидоры из microsoft. путь для самурая – мягко сказано. у меня в одном сайте порядка сотни страниц, на каждой по нескольку объектов, всего сайтов штук 20, потребуется несколько тысяч замен, чтобы вернуть всё на место – и это всё надо будет потом тщательно перепроверять, страницу за страницей, если по уму..
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-валидатора (вопрос о том кому это надо по сей день остаётся открытым), с другой стороны не придётся менять "порядка сотни страниц"… Выбирать тебе…
Спасибо за мысли… Экспериментирую, но с JS у меня несильно хорошо, потому методом тыка ))
Пока что добился лишь того (вставив твой код в страницу на onLoad, как велено), что на флешке (первой из трех на странице) – фокус и альт “press ENTER or SPACE for activate…”. Это при НЕнаведенной мышке… Бред какой-то.
Продолжаем эксперимент ))
2Mimohod:
За мысли всегда пожалуйста – приходите ещё 🙂
вот рабочий код link updated – пользуйтесь на здоровье…
UPDATE:
вот новый код link updated – теперь работает в IE 5 и 5.5 (проблема с object.getElementsByTagName(‘param’) и flashvars теперь добавляются(переписываются) только если они найдены…
Pingback:Я проcто Чудо {вище} » Blog Archive » Flash, ActiveX & IE update. part II