您好,欢迎访问一九零五行业门户网

JS访问SWF的函数用法实例_javascript技巧

本文实例讲述了js访问swf的函数用法。分享给大家供大家参考。具体分析如下:
关于flash和js相互调用的例子已经说很多了,这不是难题,当然,调用错误这也不是flash和js的错误,我们今天就来彻底解决ie,ff和chrome之间的不兼容问题!
我们知道,flash中,如果访问外部js函数,只需 
复制代码 代码如下:
flash.external.externalinterface.call(js中的函数名);
这一句即可如果要js访问flash中的函数,需要用addcallback注册一个回调函数,让js去调用(as2例子)
import flash.external.*;var methodname:string = setimgpath;//js需要调用的函数名字var instance:object = null;var method:function = extractstr;//flash中实际的函数名字,参数忽略,但是你调用的时候要记得有参数的要加上var wassuccessful:boolean = externalinterface.addcallback(methodname, instance, method);trace(wassuccessful+-callback)
我们可以trace一下,这个时候如果是true,表示注册成功
ok,下面web中试用一下:

ok,我们在web中加一个button来调用这个flashcall:
测试一下:
ie6,7,8,9一切正常
ff:失败
chrome:失败
失败原因:setimgpath不是函数,(is not a function /not defined)
这就很奇怪了,我们可以用一个alert,来输出复制代码 代码如下:
thismovie(123):alert(thismovie(123));
输出结果并不是null,说明已经找到了我们的flash,但是为啥ff和chrome就总是找不到函数呢?
逛了各大论坛,比较一致的说法是addcallback必须要是flash加载完毕才能注册成功,好吧,我们加一个settimeout函数,判断是否加载成功,我们改一下上面的flashcall:
function flashcall(str){ try{ thismovie(123).setimgpath(str);//注意,123是上面的id,而setimgpath是我们flash中的注册的回调函数 }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标签,害我调试了一个下午,才明白原来问题出在这里。
知道原因了,就好处理了,改标签:

把嵌入flash的标签改为上面的,一切ok!
希望本文所述对大家的javascript程序设计有所帮助。
其它类似信息

推荐信息