Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   IE через innerHTML не видит методов флэшки (которые EnternalInterface) (http://www.flasher.ru/forum/showthread.php?t=177405)

Sociofilm 31.03.2012 10:18

IE через innerHTML не видит методов флэшки (которые EnternalInterface)
 
Добрый день!
Понимаю, что вопрос не совсем в тему, долго определялся в какой раздел его адресовать,
решил все же выложить сюда, может есть люди, которые с таким уже встречались и решили.

Код HTML
PHP код:

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

wvxvw 31.03.2012 13:01

А что ИЕ научился понимать тег <embed>? <embed> - это ж нестандартный довесок от Мозилы, в принципе <object>ом нужно пользоваться.

Sociofilm 31.03.2012 13:38

да, знаю, но тем не менее его вполне хватало до сих пор (IE8, ранние не рассматриваю)

illuzor 31.03.2012 14:33

Используйте swfobject

Sociofilm 31.03.2012 14:42

использовал, не помогло...

Добавлено через 4 минуты
самое интересное, что сама флэшка видна, как объект, а вот методы ExternalInterface-а не видны...

wvxvw 31.03.2012 17:44

А как использовали, что не помогло? Вы показываете код, который по мануалу вообще не должен работать, но не показываете код, который в принципе обычно работает...
По поводу "пока работает" - ну так и самолет можно 95-м заправить, и даже полетает немножко.

Sociofilm 31.03.2012 21:57

да, похоже вы правы, <embed> хоть и отображает в IE флэшку и даже позволяет её использовать, но ExternalInterface при этом теряется (хотя обратная связь с флэша на JS связь есть). Сделал отдельно для IE внедрением через <object>, для остальных нетскейпообразных оставил как было.

Bgg 31.03.2012 21:59

Цитата:

Сообщение от Sociofilm (Сообщение 1072306)
да, похоже вы правы, <embed> хоть и отображает в IE флэшку и даже позволяет её использовать, но ExternalInterface при этом теряется (хотя обратная связь с флэша на JS связь есть). Сделал отдельно для IE внедрением через <object>, для остальных нетскейпообразных оставил как было.

Значит не пробовали swfobject. Там этот велосипед изобретен.

Sociofilm 01.04.2012 08:12

ну почему же не пробовал? я пробовал динамический способ создания swfobject.embedSWF() для innerHTML
PHP код:

<script>
...
document.getElementById("div_name").innerHTML 'swfobject.embedSWF(...)';
</script> 

Не работает, просто выводит в div-е эту строчку. Вставка тэгов <script> не спасает.
Также пробовал статический способ внедрения через <object>.
Если есть недоверие, попробуйте сами.

Немного расскажу про условия моей задачи: изначально div пустой в html/php. Если удалось получить переменную с фейсбука (fb id), то требуется вставить в div флэшку (swf) и передать ей параметром fb id (через FlashVars). Если не удалось, отобразить в div-е картинку, что доступ запрещен.
Таким образом подходит только динамический способ внедрения.

kackbip 01.04.2012 10:25

Серега, ты чтоли?
SWFObject по-другому использовать надо.
Вот пример:
Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <title>SWFObject dynamic embed - step 3</title>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script type="text/javascript" src="swfobject.js"></script>


    <script type="text/javascript">
    swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0");
    </script>

  </head>
  <body>
    <div id="myContent">
      <p>Alternative content</p>
    </div>

  </body>
</html>

И лучше действительно использовать SWFObject, он инкапсулирует все заморочки с разными браузерами в настоящем и, скорее всего, в будущем. :)
На сколько я знаю adobe его рекомендует :)
Вот русская дока по swfobject


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.