关于Flash和JS相互调用的例子
关于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需要调用的函数名字 instanceObject null; methodFunction extractstr//Flash中实际的函数名字,参数忽略,但是你调用的时候要记得有参数的要加上 wasSuccessfulBoolean ExternalInterfaceaddCallback(methodName,); tracewasSuccessful+"-callback") 我们可以trace一下,这个时候如果是true,表示注册成功 OK,下面web中试用一下: <div style="margin-left:50px marginbottom50px"><inputtype"text"id"mytxt"border"1"value"这是测试框,调用页面JS演示"width200px/></div> "flashContent"> <objectclassid"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"width"515"height"320""123"align"middle" <paramname"movie""123.swf" /> "quality""high""bgcolor""#000000""play""true""loop""wmode""transparent""scale""showall""menu""devicefont""false""salign""""allowScriptAccess""sameDomain" <!--[if !IE]>-->"application/x-shockwave-flash"data"320"><!--下面针对非IE内核浏览器--> <!--<![endif]--><ahref"upload/2011/1/201101281000491420.gif"alt"获得 Adobe Flash Player"</a></object></div> OK,我们在Web中加一个button来调用这个flashcall:<input type="button" onclick="flashcall('./image/1.jpg')" value="JS调用SWF"> 测试一下: 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 flashcallstr){ try{ thisMovie("123").SetImgPath);//注意,123是上面的ID,而SetImgPath是我们Flash中的注册的回调函数 }cachee 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标签,害我调试了一个下午,才明白原来问题出在这里。 知道原因了,就好处理了,改标签: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,19,0"title"always""123.swf""high"<embedsrcqualityallowScriptAccess swLiveConnectpluginspage"http://www.macromedia.com/go/getflashplayer" ></embed></object> 把嵌入Flash的标签改为上面的,一切OK! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |