Flash + ExternalInterface + IE
Не совсем JS, но...
В общем беда такая. Есть флеш с использованием ExternalInterface.addCallback("getItem", getItem); Есть JS, который подгружает этот флеш. Пробовал добавлять флэш двумя путями - через document.createElement и через innerHTML в определенный див. В обоих случаях флеш загружается и выскакивает проверочный ExternalInterface.call, во всех браузерах. В обоих случаях к ролику можно обратиться по ID или через function getMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } } Однако после такой загрузки в IE и только в IE не получается обратиться к getItem. Если флеш ролик грузится вместе со страницой, а не JS'ом, то все работает. Если загружать флеш через SWFObject 2 - то опять же все работает. Но у них код обфусцирован, а мне бы очень хотелось разобраться, как правильно добавлять в IE флеш с помощью JS, так, чтобы не отваливались ExternalInterface.addCallback. |
Покажи, как Flash добавляешь на страницу.
|
Например так:
var html_st = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="MyStorageSWF" width="1" height="1" '; html_st += 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">'; html_st += '<param name="movie" value="MyStorage.swf" />'; html_st += '<param name="quality" value="high" />'; html_st += '<param name="allowScriptAccess" value="sameDomain" />'; html_st += '<embed src="MyStorage.swf" quality="high"'; html_st += 'width="1" height="1" name="MyStorageSWF" align="middle"'; html_st += 'play="true" loop="false" quality="high" allowScriptAccess="sameDomain"'; html_st += 'type="application/x-shockwave-flash"'; html_st += 'pluginspage="http://www.macromedia.com/go/getflashplayer">'; html_st += '</embed></object>'; var div_st = document.createElement('div'); div_st.style.position = 'absolute'; div_st.style.left = '-10px'; div_st.style.top = '-10px'; div_st.style.overflow = 'hidden'; div_st.innerHTML = html_st; document.body.insertBefore(div_st, document.body.firstChild); movie = getMovie('MyStorageSWF'); Хочу заметить, что сам флеш определяется %) |
А <embed> зачем? Сомневаюсь, что это решит проблему, но вообще минимальный код для вставки Flash выглядит как-то так:
Для Internet Explorer: <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="" height=""> <PARAM name="movie" value="url" /> </OBJECT> Для остальных браузеров: <object type="application/x-shockwave-flash" data="url" width="" height=""></object> |
в общем убирание embed не помогло
Сократил до if (navigator.appName.indexOf("Microsoft") != -1) { var html_st = '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="MyStorageSWF" name="MyStorageSWF" width="1" height="1">'; html_st += '<PARAM name="movie" value="MyStorage.swf" />'; html_st += '</OBJECT>'; } else { var html_st = '<object type="application/x-shockwave-flash" id="MyStorageSWF" name="MyStorageSWF" data="MyStorage.swf" width="1" height="1"></object>' } var div_st = document.createElement('div'); div_st.style.position = 'absolute'; div_st.style.left = '-10px'; div_st.style.top = '-10px'; div_st.style.overflow = 'hidden'; div_st.innerHTML = html_st; document.body.insertBefore(div_st, document.body.firstChild); movie = getMovie('MyStorageSWF'); Проблема с IE осталась |
Часовой пояс GMT +3, время: 14:28. |