前端之家收集整理的这篇文章主要介绍了
JS访问SWF的函数用法实例,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
本文实例讲述了JS访问SWF的函数用法。分享给大家供大家参考。具体分析如下:
关于Flash和JS相互调用的例子已经说很多了,这不是难题,当然,调用错误这也不是Flash和JS的错误,我们今天就来彻底解决IE,FF和Chrome之间的不兼容问题!
我们知道,Flash中,如果访问外部JS函数,只需
函数名");
这一句即可
如果要JS访问Flash中的函数,需要用addCallBack注册一个回调函数,让JS去调用(AS2例子)
调用的
函数名字
var instance:Object = null;
var method:Function = extractstr;
//Flash中实际的
函数名字,参数忽略,但是你
调用的时候要记得有参数的要
加上
var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName,instance,method);
trace(wasSuccessful+"-callback")
我们可以trace一下,这个时候如果是true,表示注册成功
OK,下面web中试用一下:
调用
页面JS演示" style="width:200px"/>
输出结果并不是Null,说明已经找到了我们的Flash,但是为啥FF和Chrome就总是找不到函数呢?
逛了各大论坛,比较一致的说法是addCallback必须要是flash加载完毕才能注册成功,好吧,我们加一个settimeout函数,判断是否加载成功,我们改一下上面的flashcall:
注册的回调
函数
}cache(e){
settimeout("flashcall(str)",100 );
}
}
恩,我们用个settimeout,每隔100毫秒去调用一次,如果异常就持续调用,直到成功为止!
遗憾的是,始终不成功,程序进入死循环!
通过查阅各种资料,终于找到了原因:
FF中浏览器只认识embed标记,所以如果你用getElementById获 flash的时候,需要给embed做ID标记,而IE是认识object标记的 ,所以你需要在object上的ID做上你的标记
明白了吗?原来在FF和Chrome中,Flash必须用embed才能识别出他的ID,用Object标签是无法识别ID的,我用的Html是Flash自动生成的,都是Object标签,害我调试了一个下午,才明白原来问题出在这里。
知道原因了,就好处理了,改标签: