最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS訪問SWF的函數(shù)用法實例

 更新時間:2015年07月01日 15:00:53   作者:PHP之家  
這篇文章主要介紹了JS訪問SWF的函數(shù)用法,實例分析了javascript訪問swf文件的方法及易錯點的處理技巧,需要的朋友可以參考下

本文實例講述了JS訪問SWF的函數(shù)用法。分享給大家供大家參考。具體分析如下:

關于Flash和JS相互調用的例子已經說很多了,這不是難題,當然,調用錯誤這也不是Flash和JS的錯誤,我們今天就來徹底解決IE,F(xiàn)F和Chrome之間的不兼容問題!

我們知道,F(xiàn)lash中,如果訪問外部JS函數(shù),只需 

復制代碼 代碼如下:
flash.external.ExternalInterface.call("JS中的函數(shù)名");
這一句即可

如果要JS訪問Flash中的函數(shù),需要用addCallBack注冊一個回調函數(shù),讓JS去調用(AS2例子)

import flash.external.*;
var methodName:String = "SetImgPath";
//JS需要調用的函數(shù)名字
var instance:Object = null;
var method:Function = extractstr;
//Flash中實際的函數(shù)名字,參數(shù)忽略,但是你調用的時候要記得有參數(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="這是測試框,調用頁面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不是函數(shù),(is not a function /not defined)

這就很奇怪了,我們可以用一個alert,來輸出

復制代碼 代碼如下:
thisMovie("123"):alert(thisMovie("123"));

輸出結果并不是Null,說明已經找到了我們的Flash,但是為啥FF和Chrome就總是找不到函數(shù)呢?

逛了各大論壇,比較一致的說法是addCallback必須要是flash加載完畢才能注冊成功,好吧,我們加一個settimeout函數(shù),判斷是否加載成功,我們改一下上面的flashcall:

function flashcall(str){  
&nbsp;&nbsp;&nbsp;&nbsp; try{   
  thisMovie("123").SetImgPath(str);//注意,123是上面的ID,而SetImgPath是我們Flash中的注冊的回調函數(shù)
 }cache(e){
  settimeout("flashcall(str)",100 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}

恩,我們用個settimeout,每隔100毫秒去調用一次,如果異常就持續(xù)調用,直到成功為止!

遺憾的是,始終不成功,程序進入死循環(huán)!

通過查閱各種資料,終于找到了原因:

FF中瀏覽器只認識embed標記,所以如果你用getElementById獲 flash的時候,需要給embed做ID標記,而IE是認識object標記的 ,所以你需要在object上的ID做上你的標記

明白了嗎?原來在FF和Chrome中,F(xiàn)lash必須用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程序設計有所幫助。

相關文章

最新評論

宣化县| 大港区| 铁力市| 琼海市| 湖北省| 攀枝花市| 沅江市| 翁源县| 广东省| 习水县| 琼海市| 临海市| 东乡| 内丘县| 察雅县| 竹山县| 广灵县| 隆昌县| 通榆县| 旬阳县| 龙岩市| 韶山市| 九江县| 南昌市| 咸阳市| 徐汇区| 历史| 宜良县| 桦甸市| 台南县| 乐山市| 广灵县| 上杭县| 叙永县| 繁昌县| 安顺市| 宝鸡市| 峨山| 蒙城县| 唐河县| 贺州市|