Ну наверное для многих не новость, что после очередного апдейта 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: , , ,

Flash ActiveX & IE update
Tagged on:

8 thoughts on “Flash ActiveX & IE update

  • 17.04.2006 at 07:47
    Permalink

    в DOM нет такого атрибута – outerHTML – следовательно, работать будет только в ИЕ 🙂

  • 17.04.2006 at 08:45
    Permalink

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

  • 17.04.2006 at 18:48
    Permalink

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

  • 17.04.2006 at 19:48
    Permalink

    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-валидатора (вопрос о том кому это надо по сей день остаётся открытым), с другой стороны не придётся менять "порядка сотни страниц"… Выбирать тебе…

  • 20.04.2006 at 11:45
    Permalink

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

  • 20.04.2006 at 12:26
    Permalink

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

  • 21.04.2006 at 14:07
    Permalink

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

  • Pingback:Я проcто Чудо {вище} » Blog Archive » Flash, ActiveX & IE update. part II

Leave a Reply