Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2012, 05:44
Новичок на форуме
Отправить личное сообщение для sociofilm Посмотреть профиль Найти все сообщения от sociofilm
 
Регистрация: 31.03.2012
Сообщений: 1

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. К тому же, если переменная не пришла, то надо флэшку вовсе не показывать)
Благодарю за внимание.
Ответить с цитированием
  #2 (permalink)  
Старый 04.04.2012, 11:54
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

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

Последний раз редактировалось Маэстро, 04.04.2012 в 11:58.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
fancybox не работает на ссылках, созданных через innerHTML alexus jQuery 2 22.06.2011 00:08