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, время: 06:51. |