JS訪問SWF的函數(shù)用法實例
本文實例講述了JS訪問SWF的函數(shù)用法。分享給大家供大家參考。具體分析如下:
關(guān)于Flash和JS相互調(diào)用的例子已經(jīng)說很多了,這不是難題,當(dāng)然,調(diào)用錯誤這也不是Flash和JS的錯誤,我們今天就來徹底解決IE,F(xiàn)F和Chrome之間的不兼容問題!
我們知道,F(xiàn)lash中,如果訪問外部JS函數(shù),只需
如果要JS訪問Flash中的函數(shù),需要用addCallBack注冊一個回調(diào)函數(shù),讓JS去調(diào)用(AS2例子)
import flash.external.*; var methodName:String = "SetImgPath"; //JS需要調(diào)用的函數(shù)名字 var instance:Object = null; var method:Function = extractstr; //Flash中實際的函數(shù)名字,參數(shù)忽略,但是你調(diào)用的時候要記得有參數(shù)的要加上 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="這是測試框,調(diào)用頁面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內(nèi)核瀏覽器-->
<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來調(diào)用這個flashcall:<input type="button" onclick="flashcall('./image/1.jpg')" value="JS調(diào)用SWF">
測試一下:
IE6,7,8,9一切正常
FF:失敗
Chrome:失敗
失敗原因:SetImgPath不是函數(shù),(is not a function /not defined)
這就很奇怪了,我們可以用一個alert,來輸出
輸出結(jié)果并不是Null,說明已經(jīng)找到了我們的Flash,但是為啥FF和Chrome就總是找不到函數(shù)呢?
逛了各大論壇,比較一致的說法是addCallback必須要是flash加載完畢才能注冊成功,好吧,我們加一個settimeout函數(shù),判斷是否加載成功,我們改一下上面的flashcall:
function flashcall(str){
try{
thisMovie("123").SetImgPath(str);//注意,123是上面的ID,而SetImgPath是我們Flash中的注冊的回調(diào)函數(shù)
}cache(e){
settimeout("flashcall(str)",100 );
}
}
恩,我們用個settimeout,每隔100毫秒去調(diào)用一次,如果異常就持續(xù)調(diào)用,直到成功為止!
遺憾的是,始終不成功,程序進(jìn)入死循環(huán)!
通過查閱各種資料,終于找到了原因:
FF中瀏覽器只認(rèn)識embed標(biāo)記,所以如果你用getElementById獲 flash的時候,需要給embed做ID標(biāo)記,而IE是認(rèn)識object標(biāo)記的 ,所以你需要在object上的ID做上你的標(biāo)記
明白了嗎?原來在FF和Chrome中,F(xiàn)lash必須用embed才能識別出他的ID,用Object標(biāo)簽是無法識別ID的,我用的Html是Flash自動生成的,都是Object標(biāo)簽,害我調(diào)試了一個下午,才明白原來問題出在這里。
知道原因了,就好處理了,改標(biāo)簽:
<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的標(biāo)簽改為上面的,一切OK!
希望本文所述對大家的javascript程序設(shè)計有所幫助。
相關(guān)文章
2007/12/23更新創(chuàng)意無限,簡單實用(javascript log)
在javascript開發(fā)過程中,如果總是使用alert的方式調(diào)試程序,在某些簡單的程序中是可行的. 但是在通常的項目很復(fù)雜,這種方式已經(jīng)很難滿足,企業(yè)級開發(fā)的需要。2007-12-12
關(guān)于微信jssdk實現(xiàn)多圖片上傳的一點心得分享
這篇文章主要介紹了關(guān)于微信jssdk實現(xiàn)多圖片上傳的一點心得分享,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12
基于JS實現(xiàn)9種不同的面包屑和分布式多步驟導(dǎo)航效果
本文是小編給大家分享的基于js實現(xiàn)的9種不同風(fēng)格的面包屑和分布式多步驟導(dǎo)航效果,非常不錯,具有參考借鑒價值,需要的朋友參考下2017-02-02
Layui帶搜索的下拉框的使用以及動態(tài)數(shù)據(jù)綁定方法
今天小編就為大家分享一篇Layui帶搜索的下拉框的使用以及動態(tài)數(shù)據(jù)綁定方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
Bootstrap每天必學(xué)之柵格系統(tǒng)(布局)
Bootstrap每天必學(xué)之柵格系統(tǒng),小編對Bootstrap柵格系統(tǒng)(布局)也很陌生,特分享整理這篇文章,感興趣的小伙伴們可以參考一下2015-11-11

