Я вызываю функцию Actionscript из JavaScript, и она работает во всех браузерах, кроме IE9. Я сузил это до функции js, которая получает объект фильма:
<script type="text/javascript">
var swf;
...
function flashReady() // This is called from ActionScript
{
swf = getSWF("MyMovie");
swf.MyExternalFunction();
}
function getSWF(movieName)
{
if (navigator.appName.indexOf("Microsoft") != -1)
{
return window[movieName];
}
else
{
return document[movieName];
}
}
...
</script>
Вот мой HTML:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="1" height="1" id="MyMovie">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="/swf/movie.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffcc00" />
<embed src="/swf/movie.swf" quality="high" bgcolor="#ffcc00" width="1" height="1" name="MyMovie" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
Когда я вызываю внешнюю функцию следующим образом:
swf.MyExternalFunction();
В IE9 я получаю ошибку JS:
"Object doesn't support property or method 'MyExternalFunction'"
Видимо, окно [movieName], которое было хорошо для IE, не работает в IE9 так, как раньше.
Есть предложения?
::: UPDATE :::
Вот мое решение до сих пор. Может выглядеть не красиво, но работает:
var movie = false;
function initSWF(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
//alert("IE");
if (typeof (window[movieName].MyExternalFunction) == 'function') {
// alert("< IE9");
movie = window[movieName];
}
else if (typeof (document[movieName].MyExternalFunction) == 'function') {
// alert(">= IE9");
movie = document[movieName];
}
}
else {
// alert("NON IE");
movie = document[movieName];
}
return ((movie) ? true : false);
}
Тогда он используется как:
function flashReady() // This is called from ActionScript
{
if(initSwf("MyMovie")) {
movie.MyExternalFunction();
} else {
alert("Failed to initialize");
}
}