PDA

Просмотр полной версии : External Interfaces не работает в IE


insected
13.11.2008, 02:35
Знаю, что подобных тем тьма, но почему то все очевидные и советуемые решения из них не срабатывают.
есть флеш:

package {

import flash.display.Sprite;
import flash.external.ExternalInterface;
import flash.system.Security;
public class SoundJs extends Sprite
{
[Embed(source="sounds.swf", symbol="sound1")]
private var soundType:Class;
private var soundObject:Sprite;

public function SoundJs()
{
Security.allowDomain("*");
ExternalInterface.addCallback("sound",Play);
}
public function Play():void
{
soundObject = new soundType();
addChild(soundObject);
}
}
}


Есть html:

<html>
<script language="Javascript">

function playIt(){
thisMovie("myMovie").sound();
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}

</script>

<object width="100" height="100" align="left">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="SoundJs.swf" />
<embed
src="http://xx.xxx.xx.xxx/xxx/xxx/SoundJs.swf"
quality="high" bgcolor="#ffffff" width="10" height="10"
name="myMovie" align="middle"
allowScriptAccess="always"
type="application/x-shockwave-flash"/>
</embed>
</object>

<form>
<input type="button" onclick="playIt()" value="ГСОМЕ!" />
</form>

</html>



В мозилле работает, в IE нет. на строчке thisMovie("myMovie").sound(); кидается ошибка Object doesn`t support property or method. Во всех туториалах подобный код приводится в качестве примера, так почему же он не работает??

s8000_1
13.11.2008, 02:52
Попробуйте переименовать метод флэша с sound на soundIt

p.s. Play - не правильное название функции, правильное: play

SwfShield
13.11.2008, 09:10
Попробуйте вместо тега embed использовать object, а еще лучше используйте swfObject для внедрения свф-ки в хтмл-страницу. Тут есть несколько тонких мест (например, необходимость активации свф-ки в ИЕ), в swfObject эти особенности отработаны и учтены

Alex Lexcuk
13.11.2008, 09:32
http://www.dnadillo.dn.ua/fla/swf-js-go-cat.html

insected
13.11.2008, 10:50
Попробуйте переименовать метод флэша с sound на soundIt

p.s. Play - не правильное название функции, правильное: play

1. Что даст переименование метода ?
2. Почему Play неправильное название функции ?

wvxvw
13.11.2008, 12:38
А почему HTML такой странный? Вообще странно, что это хоть где-то работает =/ По идее если не создавать боди / хед то это никакую валидацию не пройдет...

Ну и добавить к этому, что language в теге скрипта никому не нужен, зато нужен type, формы без имени / ИД - не валидные формы, кроме того ХТМЛей есть надцать разновидностей, и чтобы как-то объяснить браузеру какую из них вы пытались использовать желательно писать DTD, ну и т.д. и т.п...

s8000_1
13.11.2008, 16:09
1. Что даст переименование метода ?


1. В IE есть какие-то зарезервированные слова, которые нельзя использовать для взаимодействия с флэшем. Помню долго боролся с этим.

2. Потому что с прописных букв называют только классы.

insected
14.11.2008, 20:17
И да, забыл отписаться. Помог SWFObject:

<html>
<body>

<script type="text/javascript" src="swfobject.js"></script>

<script type="text/javascript">
function playIt()
{
flashcontent.soundIt();
}
</script>


<div id="flashcontent">
Этот текст будет заменен флэшкой.
</div>

<script type="text/javascript">


swfobject.embedSWF("http://**.**.**.**/*SoundJs.swf",
"flashcontent", "1", "1", "9.0.0");
</script>

<input type="button" value="Gsom" onclick="playIt()"/>
</body>
</html>