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. К тому же, если переменная не пришла, то надо флэшку вовсе не показывать) Благодарю за внимание. |
Для 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. |