下面是一些在Flash和使用Javascript的HTML檔案直接通訊的樣本,每個樣本都有簡略的步驟
本文討論了3種基本的Flash/Javascript通訊方式:
Javascript 到 Flash的通訊----使用Flash播放器的javascript方法
Flash 到 Javascript的通訊----使用Flash的fscommand
Flash 到 Flash的通訊----------使用本地連線物件或綜合上2種技術
並不是所有的瀏覽器都很重視指令碼.為了和Flash播放器通訊,瀏覽器必須有內建的鉤子以便Flash播放器可以'監聽'.瀏覽器必須是下列的幾種:
Netscape Navigator 3.0-4.7x, 和 Netscape 6.2或更高
(Windows 95/98/NT/2000/XP 或 MacOS; 允許Java和LiveConnect)
Internet Explorer 3.0 或更高
(僅Windows 95/98/NT/2000/XP; 允許ActiveX)
Javascript到Flash的通訊
這個例子示範了如何使用Flash的method把變數從HTML的input text 發送到該頁面中的Flash檔案中.HTML input的資料通過Flash的SetVariable方法傳送到Flash檔案中.
查看樣本:樣本
下載源檔案: javascript_to_flash.zip(17k)
步驟:
Flash中
1.建立一個檔案,儲存為javascript_to_flash.fla
2.用文字工具在舞台上建立一個文本域
3.選擇這個文本域,在屬性面板中,從下拉式清單中選擇動態文本(Dynamic Text),在變數(variable)欄填上"myVar"
注意:最好的習慣是使用Instance,用myVar.text更改myVar的值.為了簡單起見和相容Flash4和Flash5,我們使用的是變數名的形式.
4.儲存檔案
5.發布HTML檔案和SWF檔案
Dreamweaver中
下一步的工作轉移到Dreamweaver中了,當然也可以是其他的HTML編輯器
1.開啟上一步發布的HTML檔案
2.插入產生的SWF檔案和OBJECT/EMBED標籤
(1) Insert>Media>Flash,並選擇這個Flash
(2) 切換到程式碼檢視,我們需要修改被選中的<OBJECT>和<EMBED>標籤
(3) 在OBJECT標籤中,插入id="myFlash"
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
注意:如果你是粘貼複製代碼的話,確保刪除不必要的換行.否則可能會引起錯誤; id也可以在屬性面板裡直接輸入
(4) 在EMBED標籤中,插入name="myFlash"和swLiveConnect="true",確保沒有使用id屬性!代碼應當是這樣子的:
<embed src="javascript_to_flash.swf" quality=high width=366 height=142
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash"
name="myFlash" swLiveConnect="true">
</embed>
3.建立表單域
(1) 回到設計檢視
(2) 插入文本域(Insert> Form Object> Text Field),如果詢問是否添加表單域,選擇是
(3) 把文本域的HTML標籤修改成這樣:
<input type="text" name="sendText" maxlength="45" onChange="doPassVar(this)">
每當文本域內容發生變化時,onChange就被觸發,doPassVar()函數就被調用
4.建立傳遞變數值的Javascript函數
複製下面的Javascript到<head></head>標籤內
<SCRIPT LANGUAGE=JavaScript>
<!--
function doPassVar(args){
var sendText = args.value;
window.document.myFlash.SetVariable("myVar", sendText);
}
//-->
</SCRIPT>
5.儲存檔案,測試一下(F12)
Flash到Javascript的通訊
從HTML可以發送資料到Flash,反過來也可以. 這個例子示範了如何應用Flash的Fscommand來發送資料到Javascript.
查看樣本:樣本2
下載源檔案: flash_to_javascript.zip(10K)
簡要步驟:
Flash中
建立一個檔案,儲存為flash_to_javascript.fla
建立一個文本域,設定成輸入文本(Input Text),選擇"border"以便我們能看到他,指定他的變數為inputVar
建立一個按鈕,在按鈕上添加如下的as:
on (release) {
fscommand ("send_var", inputVar);
}
儲存檔案,匯出HTML和SWF
Dreamweaver中
1.開啟匯出HTML檔案,修改<OBJECT>和<EMBED>標籤,結果同上:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
<embed src="javascript_to_flash.swf" quality=high
width=366 height=142
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash" name="myFlash" swLiveConnect="true">
</embed>
2. 插入如下的Javascript到<Body>標籤內:
<SCRIPT LANGUAGE=JavaScript>
<!--
var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
function myFlash_DoFSCommand(command, args) {
var myFlashObj = InternetExplorer ? myFlash : document.myFlash;
alert (args);
}
if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 &&
navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) {
document.write('<SCRIPT LANGUAGE=VBScript\> \n');
document.write('on error resume next \n');
document.write('Sub myFlash_FSCommand(ByVal command, ByVal args)\n');
document.write(' call myFlash_DoFSCommand(command, args)\n');
document.write('end sub\n');
document.write('</SCRIPT\> \n');
}
//-->
</SCRIPT>
Flash和Flash的通訊
通過上面兩種方法的混和使用,同一HTML中兩個或者更多的Flash直接可以相互傳送訊息. 從一個flash使用fscommand傳送訊息給Javascript,使用Flash的Javascript methods把訊息傳給另外一個flash
詳細的看這裡:Flash影片之間的通訊樣本
從Flash MX開始,local connection對象可以用來在flash之間傳送訊息. 這使得同一HTML中的或者位於兩個瀏覽器視窗中的兩個flash影片可以相互發送訊息,而不必使用Javascript或者fscommand
詳細的看這裡:在Flash MX中使用local connection對象(英文)
本站的localConnection教程:http://www.blueidea.com/tech/multimedia/2003/739.asp
附可控制Flash Player的Javascript方法一覽表:
Play() ---------------------------------------- 播放動畫
StopPlay()------------------------------------停止動畫
IsPlaying()----------------------------------- 動畫是否現正播放
GotoFrame(frame_number)---------------- 跳轉到某幀
TotalFrames()------------------------------- 擷取動畫總幀數
CurrentFrame()------------------------------回傳當前動畫所在幀數-1
Rewind()-------------------------------------使動畫返回第一幀
SetZoomRect(left,top,right,buttom)-------放大指定地區
Zoom(percent)------------------------------改變動畫大小
Pan(x_position,y_position,unit)------------使動畫在x,y方向上平移
PercentLoaded()----------------------------返回動畫被載入的百分比
LoadMovie(level_number,path)----------- 載入動畫
TGotoFrame(movie_clip,frame_number)- movie_clip跳轉到指定幀數
TGotoLabel(movie_clip,label_name)------ movie_clip跳轉到指定標籤
TCurrentFrame(movie_clip)--------------- 回傳movie_clip當前幀-1
TCurrentLabel(movie_clip)-----------------回傳movie_clip當前標籤
TPlay(movie_clip)---------------------------播放movie_clip
TStopPlay(movie_clip)----------------------停止movie_clip的播放
GetVariable(variable_name)-----------------擷取變數
SetVariable(variable_name,value)-----------變數賦值
TCallFrame(movie_clip,frame_number)---call指定幀上的action
TCallLabel(movie_clip,label)----------------call指定標籤上的action
TGetProperty(movie_clip,property)--------擷取movie_clip的指定屬性
TSetProperty(movie_clip,property,number)-設定movie_clip的指定屬性