本文实例讲述了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就总是找不到函数呢"htmlcode">
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做上你的标记
明白了吗"htmlcode">
<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="/UploadFiles/2021-04-02/123.swf">把嵌入Flash的标签改为上面的,一切OK!
希望本文所述对大家的javascript程序设计有所帮助。
JS,访问SWF
更新动态
- 群星《唱给女人的歌》24K德国HD金碟[WAV+CUE]
- 孙燕姿.2011-是时候【美妙音乐】【WAV+CUE】
- 苏芮.2003-回首·时代全经典2CD【华纳】【WAV+CUE】
- 梁咏琪.1996-爱自己【EEI】【WAV+CUE】
- IGN经典逆天骚操作名著——《墙头草修炼手册》
- 突然爆火的“网红游戏”,真的有那么多人玩吗?
- 何老师客串《浪人崛起》了?盘点与明星撞脸的角色!
- 【原神】关于星鹫赤羽对珐芙琴班配队下珐露珊主C的适配度分析
- 【原神】V5.1攻略 | 迪西雅角色简评
- 【原神】大日御舆顶端怎么上去
- 胥拉齐《感谢有你》DTS-WAV
- 罗海英《金牌歌后》【WAV+CUE】
- 林叶《林叶·夜》【WAV/分轨】
- 群星《国语经典名曲01》音乐磁场系列[WAV+CUE][1G]
- 齐豫《滚石24K》24K金碟珍藏版系列[低速原抓WAV+分轨][1G]