JS與Flash相互調用

HTML中添加Flash:

<object class="djs" id="FlashID" classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="88" height="88" border="0">
      <param name="movie" value="images/daojishi.swf">
      <param name="quality" value="High">
      <param name="loop" value="false">
      <param name="wmode" value="transparent" />
      <embed id="FlashID" src="images/daojishi.swf" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="obj1" width="88" height="88" quality="High" loop="false">
    </object>

說明:

<param name="wmode" value="transparent" /> :顯示flash背景透明

給object和embed添加相同的ID:如果你省略了embed標籤,那firefox就不能識別你的flash


flash使用的actionscript跟javascript是非常相通的,下面描述如何互相調用函數:

1:javascript調用flash中的函數
在flash的腳本中增加
代碼:import flash.external.ExternalInterface;
假定要調用的函數是hello,as代碼如下
代碼:function hello(){
   return "hello";
}
ExternalInterface.addCallback("hello", this, hello);
//第一個參數爲導出函數名,第三個參數爲as的函數名

這樣就可以在js中調用as的hello函數了


2:flash調用js的函數
ExternalInterface.call("hello2", "jacky");
//第一個參數是js的函數名,後面的是js函數的參數

3:如何互相調用

html代碼如下:
代碼:<object type="application/x-shockwave-flash" data="test.swf" width="525" height="390" name="test">
                        <param name="allowScriptAccess" value="sameDomain" />
                        <param name="movie" value="test.swf" />
                        <param name="quality" value="high" />
                        <param name="scale" value="noScale" />
                        <param name="wmode" value="transparent" />
                        
</object>

function callFromFlash() {
    var a=thisMovie("test").hello();
    alert(a);
}

function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName]
    }
    else {
        return document[movieName]
    }
}





最近開發網站時遇到一個問題,如何與FLASH裏的AS腳本進行交互?

需要在Flash裏讀取網頁JavaScript裏的值,用於控制兩個Flash協同顯示內容。

最後終於在Flash找到了ExternalInterface類,要求環境:AS 1.0,Flash Player 8.0以上

一、在網頁中通過JavaScript調用Flash裏的ActionScript:
可以通過ExternalInterface的addCallback方法,在Flash裏註冊一個可以供網頁上的JavaScript或ActiveX調用的方法,具體代碼如下:
程序代碼

import flash.external.*;
var methodName:String = "PlayBB";
var instance:Object = null;
var method:Function = playB;
var ws:Boolean = ExternalInterface.addCallback(methodName, instance, method);

在JavaScript中調用時,需要爲Flash所在的Object標籤設置一個ID,並且設置allowScriptAccess屬性,示例代碼如下:
程序代碼

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

網頁中的JavaScript具體的調用示例:
程序代碼

function thisMovie(movieName) {
     if (navigator.appName.indexOf("Microsoft") != -1) {
         return window[movieName]
     }
     else {
         return document[movieName]
     }
}
thisMovie("topFlash").PlayBB();



二、在Flash的ActionScript中調用網頁裏的JavaScript:
直接使用ExternalInterface的Call方法就可以了,示例代碼如下:
程序代碼

import flash.external.*;
var obj:Object = ExternalInterface.Call("JavaScript方法", "參數");

參數可以是任何As中的類型,在調用時Flash會自動封裝,多參數使用,分隔。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章