Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ExternalInterface.addCallback не хочет дружить с InternetExplorer (http://www.flasher.ru/forum/showthread.php?t=179217)

OwnerOfSuccuby 10.05.2012 00:01

ExternalInterface.addCallback не хочет дружить с InternetExplorer
 
Здравствуйте. Возникла проблема. Пытаюсь научиться передавать переменные из JavaScript во Flash.

В итоге все браузеры понимают и хром и лиса, а интернет експловер не хочет и находит кучу ошибок =)

Вот пример сделан на скорую руку чтобы нагляднее показать. (Извините за маленькую небрежность оформления).

http://ownerofsuccuby.narod.ru/TestTemp/test.html

html код:
Код AS1/AS2:

flash.system.Security.allowDomain("*");
 
ExternalInterface.addCallback("mFlashFunction",myffunction);
 
function myffunction(t:String):void {
  mytext.text=t;       
}

AS3 код:
Код:

<HTML>

<script>
function mPost(){
  var MyFlsh=document.getElementById('MyFlash');
  var MyFlsh2=document.getElementById('MyFlash2');
  var MyTxt=document.getElementById('MyText').value;
  MyFlsh.mFlashFunction(MyTxt);
  MyFlsh2.mFlashFunction(MyTxt);
}
</script>

<form>
  <input type="text" id="MyText"/>
  <input type="button" value="ok" onclick="mPost()"/>
</form>


<EMBED SRC="./MC.swf" id="MyFlash" width="400" height="300" autostart="true" loop="true">



<object type="application/x-shockwave-flash" id="MyFlash2" data="MC.swf" width="800" height="600">
    <param name="quality" value="high" />
    <param name="allowScriptAccess" value="always" />
    <param name="allowFullScreen" value="true" />
    <param name="menu" value="false" />
    <param name="wmode" value="transparent" />
    <param name="movie" value="MC.swf" />  <!-- Не срабатывает -->
    <param name="allowScriptAccess" value="always" />
    <embed type="application/x-shockwave-flash" id="MyFlash2" pluginspage="http://get.adobe.com/flashplayer/" wmode="transparent" src="MC.swf" width="800" height="600">
    <noembed><img src="images/no_flash.png" alt="No flash" width="800" height="600" /></noembed>
    </embed>   
</object>

</HTML>

Если кто-то знает в чём проблема, подскажите пожалуйста. Как это подружить с Интернет Экспловером =))
Извините за малость кривой код и русский язык - просто мозг уже отказывается работать =)

dmitry bond 10.05.2012 01:21

Можно еще попробовать через Setvariable.
Код:

getMovie().SetVariable("message","data")
Потом просто во флеше проверяешь каждый кадр, если переменная появится.

mooncar 10.05.2012 01:30

Было такое. Консоль ошибок в IE проверьте. Вероятно там что-то типа "mFlashFunction не является методом..." или в таком духе. Кажется связано было с тем, что этот метод не успевал проинициализироваться, и IE тупо не видел его у объекта флешки.
Попробуйте использовать для публикации флешки SWFObject.

PS. И временно закомментируйте в JS строку "var MyTxt=...", оставьте там вообще самое необходимое для проверки одной флешки с ExternalInterface - возможно IE, анализируя функцию JS, просто не добирается до нужной строки из-за ошибок в предыдущих.

PPS. У вас еще заголовочки кода перепутаны в сообщении - html и AS3.

OwnerOfSuccuby 10.05.2012 02:09

Огромное спасибо за ответы. Силой магической магии всё заработало. Походу тег эмбед и всё что с ним связано всё портил ) без него работает. В исходной флешке его и не было - а тут я приписал его для допроверки результата. Оказалось что я дописал неправильно =)))

Но зато сделал вывод - где то в оригинальной версии у меня идут наложения раз не работает.

Вот код который магическим образом =))) запустился =) Может когда нибудь кому то пригодится =)))

Код HTML

Код:

<HTML>

<script>
function mPost(){
  var MyFlsh2=document.getElementById('MyFlash2');
  var MyTxt=document.getElementById('MyText').value;
  MyFlsh2.mFlashFunction(MyTxt);
}
</script>

<form>
  <input type="text" id="MyText"/>
  <input type="button" value="ok" onclick="mPost()"/>
</form>



<object type="application/x-shockwave-flash" id="MyFlash2" data="MC.swf" width="800" height="600">
    <param name="quality" value="high" />
    <param name="allowScriptAccess" value="always" />
    <param name="allowFullScreen" value="true" />
    <param name="menu" value="false" />
    <param name="wmode" value="transparent" />
    <param name="movie" value="MC.swf" />  <!-- Не срабатывает -->
    <param name="allowScriptAccess" value="always" />
    <embed type="application/x-shockwave-flash" id="MyFlash2" pluginspage="http://get.adobe.com/flashplayer/" wmode="transparent" src="MC.swf" width="800" height="600">
    <noembed><img src="images/no_flash.png" alt="No flash" width="800" height="600" /></noembed>
    </embed>   
</object>

</HTML>

Код Flash (не менял =)):

Код AS3:

flash.system.Security.allowDomain("*");
 
ExternalInterface.addCallback("mFlashFunction",myffunction);
 
function myffunction(t:String):void {
  mytext.text=t;       
}

Кстате да, я в первом посту ещё и перепутал названия цитат с кодами =) Спасибо что поправили.

in4core 10.05.2012 03:08

Не пригодится. Все используют swfObject.embedSwf уже давно

OwnerOfSuccuby 10.05.2012 03:35

Попробую ) Спасибо за совет.


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

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