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]
}
}
("topFlash").PlayBB();
二、在Flash的ActionScript中調用網頁里的JavaScript:
直接使用ExternalInterface的Call方法就可以了,示例代碼如下:
程序代碼
import flash.external.*;
var obj:Object = ExternalInterface.Call("JavaScript方法", "參數");
參數可以是任何As中的類型,在調用時Flash會自動封裝,多參數使用,分隔。