广

JavaScript

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    JS访问SWF的函数用法实例

    2018-04-07 07:49:38 次阅读 稿源:互联网
    零七广告

    本文实例讲述了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中试用一下:

    <div style="margin-left:50px; margin-bottom:50px"><input type="text" id="mytxt" border="1" value="这是测试框,调用页面JS演示" style="width:200px"/></div>  <div id="flashContent">   <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="515" height="320" id="123" align="middle">    <param name="movie" value="123.swf" />    <param name="quality" value="high" />    <param name="bgcolor" value="#000000" />    <param name="play" value="true" />    <param name="loop" value="true" />    <param name="wmode" value="transparent" />    <param name="scale" value="showall" />    <param name="menu" value="true" />    <param name="devicefont" value="false" />    <param name="salign" value="" />    <param name="allowScriptAccess" value="sameDomain" />    <!--[if !IE]>-->    <object type="application/x-shockwave-flash" data="123.swf" width="515" height="320"><!--下面针对非IE内核浏览器-->      <param name="movie" value="123.swf" />     <param name="quality" value="high" />     <param name="bgcolor" value="#000000" />     <param name="play" value="true" />     <param name="loop" value="true" />     <param name="wmode" value="transparent" />     <param name="scale" value="showall" />     <param name="menu" value="true" />     <param name="devicefont" value="false" />     <param name="salign" value="" />     <param name="allowScriptAccess" value="sameDomain" />    <!--<![endif]-->     <a href="upload/2011/1/201101281000491420.gif" alt="获得 Adobe Flash Player" />     </a>    <!--[if !IE]>-->    </object>    <!--<![endif]-->   </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 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标签,害我调试了一个下午,才明白原来问题出在这里。

    知道原因了,就好处理了,改标签:

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="515" height="320" id="123" title="123" align="middle"> <param name="allowScriptAccess" value="always" /> <param name="movie" value="123.swf"> <param name="quality" value="high">  <param name="wmode" value="transparent" /> <embed src="123.swf" name="123" quality="high" allowScriptAccess="always" swLiveConnect="true" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="515" height="320"></embed></object>

    把嵌入Flash的标签改为上面的,一切OK!

    希望本文所述对大家的javascript程序设计有所帮助。

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告