Flash, ActiveX & IE update. part II

Эпопея с рамками вокруг флеша продолжается…

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

Но были замечены падения браузеров (5-го и 5.5) после переписывания outerHTML…
С другой стороны рамки вокруг ActiveX в этих браузерах мною замечены не были… посему код flash_replacer.js теперь исполняется только в IE6 (седьмой покамест beta – на него не рассчитываю).

Собственно код находиться здесь. (v.0.3.1) (v.0.4)(v.0.4.1)(v.0.5)(v.0.5.1)(v.0.6)(v.0.7)

Нуждающиеся в нём могут качать и пользоваться.
Знающие могут помочь мне с ответом на вопрос – в IE версий ниже 6-ой рамки есть или нету?
Баги и вообще любые фидбеки приветствуются…

UPDATE:
Исправил маленький “глюк”, переименовал файл – теперь последняя версия называется flash_replacer_latest.js (находится по ссылке выше). Просьба к товарищам ссылающимся на данный файл поменять ссылку на файл (заранее спасибо за изменения и за ссылку вообще ;o) )

27.04 – Поправил проверку classid и сделал аналогичный прогон по embed-ам вне object-а

11.05 – Поправил регулярку, с помощью которой вытаскивались flashvars(они могут быть многострочными)

23.05 – удаляю outerHTML на window.unload (ie иногда падал из-за memory leak), flash_replacer теперь запускается только в winxp ie6+. Подробнее чуть позже опишу в третьей части “эпопеи”…
24.05 – workaround для flashvars, которые вставляются как get-параметры в src мувика

30.06 – теперь используется SWFObject для внедрения “переписанных флешек”, в связи с этим баги с падением IE исчезли, но “маленько” уменьшилась функциональность – восстановлю на днях работу c embed и flashvars, которые передаются get-параметрами в src мувика

Уже месяц висит draft-пост про “завершение эпопеи”… но похоже конца этой “эпопеи” нет и не предвидится ;o)
Продолжение следует…

Technorati Tags: , ,

24.04.06  |   | 20 comments

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.04.06  |   | 8 comments

Performance Optimization WordPress Plugins by W3 EDGE