国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS訪問SWF的函數用法實例

2019-11-20 12:07:33
字體:
來源:轉載
供稿:網友

本文實例講述了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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 余干县| 潜山县| 岑溪市| 桃江县| 沈丘县| 嫩江县| 武冈市| 家居| 靖安县| 景洪市| 广宁县| 甘南县| 鄂州市| 岳池县| 庐江县| 将乐县| 平定县| 托里县| 桂林市| 辽中县| 康定县| 鹤山市| 昭平县| 漯河市| 铁岭市| 哈尔滨市| 太保市| 宜兴市| 阳新县| 渝中区| 观塘区| 靖宇县| 滁州市| 南和县| 泽库县| 商水县| 河津市| 泰和县| 西林县| 九龙城区| 台州市|