Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   IE через innerHTML не видит методов флэшки (которые EnternalInterface) (https://javascript.ru/forum/css-html-internet-explorer/27014-ie-cherez-innerhtml-ne-vidit-metodov-flehshki-kotorye-enternalinterface.html)

sociofilm 31.03.2012 06:44

IE через innerHTML не видит методов флэшки (которые EnternalInterface)
 
Добрый день!

<div id="game">
сюда будем вставлять динамически вставим SWF через innerHTML
</div>

<script>
document.getElementById("game").innerHTML = '<embed width="760" height="660" align="middle" type="application/x-shockwave-flash" salign="" allowscriptaccess="sameDomain" allowfullscreen="false" menu="true" name="Taxoman" id="Taxoman" bgcolor="#000000" devicefont="false" wmode="transparent" scale="showall" loop="true" play="true" pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" src="Taxoman.swf">';


function test() {
    Taxoman.test();
}
</script>


test() регистрируется во флэше с помощью ExternalInterface.callback()
Сразу скажу, во всех браузерах (Opera, Chrome, FireFox, Safari) эта штука нормально работает, а в IE не хочет.
Ругается, что не определен метод test у Taxoman.swf (очевидно из-за динамического внедрения)
Если внедрять SWF статически (сразу прописать в секции div: <embed ....>), то метод виден и понятен IE.

Как быть, что делать?
Альтернативный вариант: можно ли как то задавать момент запуска (старта для выполнения) флэшки SWF самому? Мне в коде JS надо дождаться определенного момента, когда станет известна одна переменная (приходит с сервера, но статическая флэшка стартует раньше, поэтому переменную не удается успеть передать через FlashVars. К тому же, если переменная не пришла, то надо флэшку вовсе не показывать)
Благодарю за внимание.

Маэстро 04.04.2012 12:54

Для IE мне помог только такой способ: в html-документ вписываете
<!--[if IE]>
<script event="FSCommand(command,args)" for="Taxoman"> eval(args);</script>
<![endif]-->
("Taxoman" - имя Вашего плеера) и тогда динамически вставляемая флешка тоже работает в IE.

Еще можете попробовать внедрять флеш с помощью гугловского универсального внедряльщика, хотя лично я сталкивался с рядом трудностей при его использовании.

Также хочу отметить, что при динамическом создании (внедрении) флеш в разных браузерах проходит некоторое время до его готовности (от 100 ms до 1,5 сек.) и бесполезно сразу после внедрения запускать его Play, нужно дождаться сигнала готовности (Ready) от плеера (надо предусмотреть такой сигнал в callback).

И последнее. Для устранения проблем передачи переменной через FlashVars, в частности для передачи URL просматриваемого видео, должен быть в интерфейсе предусмотрен отдельный метод типа Taxoman.SetURL(), который можно будет запускать после получения Ready.

И самое последнее.
"К тому же, если переменная не пришла, то надо флэшку вовсе не показывать"
Очевидно, что Вы в этом случае будете держать флешку в состоянии "display:none". Не знаю, почему придумана такая глупость, но в этом состоянии методы флешки перестают работать.


Часовой пояс GMT +3, время: 15:15.