Можно ли встроить SWF в форму с помощью swfobject 2+ в IE6 +?

У меня были бесконечные проблемы со встраиванием динамически загружаемого SWF в HTML-форму в IE 6,7,8 с использованием swfobject.embedSwf.

Все предлагаемые вручную обходные пути проблемы включают создание ссылки на элемент Object DOM из объекта окна. Например:

window[id] = document.getElementById(id);

Где id - это идентификатор dom-элемента SWF-объекта. В моем случае я не могу установить window[id] на идентификатор объекта swf, потому что он еще не был создан!

Строка в swfobject, вызывающая ошибки javascript:

el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';

Когда SWF-фильм устанавливает внешний интерфейс Javascript, он пытается получить доступ к окну [id]. Поскольку этого не существует, он не работает.

Если я применяю упомянутый выше обходной путь и заполняю window[id] элементом DOM, который заменяется на embedSwf, он все равно терпит неудачу, поскольку пытается вызвать специальные методы Flash для элемента DOM div, а не для элемента DOM объекта.

Я нахожу удивительным, что эта проблема не была исправлена ​​со времен Flash 8 и IE6!


person brotchie    schedule 01.07.2009    source источник


Ответы (1)


я не уверен, где у вас проблема. ExternalInterface и SWFObject отлично работают в IE6 / 7/8. См. Этот пример (пояснения к примеру: здесь)

когда вы говорите «встроить SWF в форму», что именно вы пытаетесь сделать? если вы встраиваете swf в div, не имеет значения, находится ли этот div в форме или где-либо еще в теле.

вот пример SWF в форме

Что касается window [id], это устаревший подход, и его следует заменить на document.getElementById (id). во многих старых руководствах / документации по Flash говорится, что при работе с ExternalInterface следует использовать window [id], но теперь этот совет можно проигнорировать, поскольку каждый основной браузер поддерживает стандартный документ W3C document.getElementbyId. Сюда входят IE6 / 7/8, Firefox, Safari / Webkit, Opera и т. Д.

Что касается элемента, существовавшего до попытки его найти, это проблема времени. SWFObject встраивает SWF в domready / onload, что означает, что вам не следует пытаться вызвать ExternalInterface до тех пор, пока SWF не загрузится. Вы можете сделать это, поместив любой код, который вы пишете, в функцию domready:

swfobject.addDomLoadEvent(function (){
  //safe to execute code on your embedded SWF in here
});

SWFObject 2.2 имеет новую функцию обратного вызова, которая позволяет вызывать функцию сразу после встраивания SWF. У Бобби Ван дер Слуиса есть пример, на котором вы можете "просмотреть исходный код". В документации по SWFObject API описано его использование.

надеюсь, это поможет

- филипп

person pipwerks    schedule 01.07.2009