Javascript AdobeExternalInterface在IE9中不工作
我正在从JavaScript调用一个Actionscript函数,它可以在除IE9之外的所有浏览器中工作。我将其缩小为检索电影对象的js函数:Javascript AdobeExternalInterface在IE9中不工作,javascript,flash,actionscript,internet-explorer-9,externalinterface,Javascript,Flash,Actionscript,Internet Explorer 9,Externalinterface,我正在从JavaScript调用一个Actionscript函数,它可以在除IE9之外的所有浏览器中工作。我将其缩小为检索电影对象的js函数: <script type="text/javascript"> var swf; ... function flashReady() // This is called from ActionScript { swf = getSWF("MyMovie"); swf.MyExternalFunction(); } f
<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>
在IE9中,我得到一个JS错误:
"Object doesn't support property or method 'MyExternalFunction'"
显然,对IE有好处的window[movieName],在IE9中已经不像以前那样工作了。
有什么建议吗
::更新::
这是我目前的解决方案。它可能看起来不漂亮,但它可以工作:
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);
}
我在IE9上也遇到过同样的问题,对我来说,就是IE9缓存闪存的情况。尝试清除浏览器缓存(f12用于开发人员工具,我认为有一个图标可以清除缓存或ctrl-R),然后再次尝试 如果没有,请尝试通过将对actionscript的javascript调用延迟1或2秒进行调试,大致如下:
<SCRIPT LANGUAGE='Javascript'>
function delayForFlash() {
setTimeout("startFlash()", 1000);
}
function startFlash() {
getFlashMovie("flashdemo").restartFlash();
}
window.onload = function(){ delayForFlash();}
</SCRIPT>
函数delayForFlash(){
setTimeout(“startFlash()”,1000);
}
函数startFlash(){
getFlashMovie(“flashdemo”).restartFlash();
}
window.onload=函数(){delayForFlash();}
这是为了给你的闪光灯足够的时间来加载所有东西 我也遇到过类似的问题,只是它在IE9中工作,而不是在IE7/8中。我相信我们两个问题的原因是一样的。我在一张单子上偶然看到了这篇精彩的文章,解决了这个问题:分开 在本文之后,正确格式的HTML应为:
<object type="application/x-shockwave-flash" data="/swf/movie.swf" 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" />
</object>
我希望这有帮助。可能没有关系,但您应该使用
而不是
是的,谢谢,我实际上使用了type=“text/javascript”,但这不重要。您何时调用外部函数?调用Flash对象时可能没有加载它。另外,我们不是在1990年,document.getElementById
可以在所有浏览器上工作,不要使用window[movieName]
或document[movieName]
。我有一个flashReady()JS函数,一旦加载就从swf调用。反过来,它尝试通过从getSWF()获取正确的对象来初始化。到我的知识窗口[movieName]获取标记,文档[movieName]获取标记。你建议哪个浏览器使用getElementById?@OctoRazor所有这些,窗口[movieName]
都是IE的一个老功能,用于通过ID获取元素。文档。getElementById
现在是通过ID访问元素的标准方式。它适用于所有浏览器,除非你使用的是14年以上的浏览器(例如:IE4)。谢谢你的提示,但不是这个。我确切地知道电影什么时候准备好了,因为我从电影本身触发JS init进程。在任何情况下,出于好奇,我尝试添加延迟,但没有成功。因此,您的代码的工作方式是:ActionScript调用Javascript,然后Javascript将一些信息传递回ActionScript?我曾经这样做过,但后来我切换到等待flash加载,javascript第一次接触到actionscript,因为一些IE9缓存问题。您是在本地运行还是在服务器上运行时遇到此问题?服务器和本地都存在此问题。即使等待了几分钟也无法调用该函数(我知道,傻瓜)。您可以使用开发工具控制台来测试这一点。我发布了一个新的问题解决方案。它是脏的,并且依赖于一个特定的AS函数,以便JS验证其可用性。
function flashReady() // This is called from ActionScript
{
if(initSwf("MyMovie")) {
movie.MyExternalFunction();
} else {
alert("Failed to initialize");
}
}
<SCRIPT LANGUAGE='Javascript'>
function delayForFlash() {
setTimeout("startFlash()", 1000);
}
function startFlash() {
getFlashMovie("flashdemo").restartFlash();
}
window.onload = function(){ delayForFlash();}
</SCRIPT>
<object type="application/x-shockwave-flash" data="/swf/movie.swf" 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" />
</object>
// After the flash object has loaded...
var movie = document.getElementById('MyMovie');
if (typeof movie.MyExternalFunction === 'function') movie.MyExternalFunction();