Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Flash + ExternalInterface + IE (https://javascript.ru/forum/css-html-internet-explorer/8246-flash-externalinterface-ie.html)

Snipe 16.03.2010 17:37

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.

Octane 16.03.2010 17:51

Покажи, как Flash добавляешь на страницу.

Snipe 16.03.2010 17:55

Например так:
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');


Хочу заметить, что сам флеш определяется %)

Octane 16.03.2010 18:06

А <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>

Snipe 16.03.2010 18:11

в общем убирание 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, время: 13:31.