因為有需求所以上網找到不錯的資源提供給大家參考

目錄:



FS Command命令簡介

對FS Command命令的支持

通訊的兩個方向

怎樣實現Flash 到 JavaScript的通訊

怎樣實現JavaScript 到 Flash 的通訊

可取的 Flash JavaScript方法(未譯)

相關內容參考(未譯)





FS Command命令簡介



本文寫作的目的就是主要用「fscommand」函數探討Flash與JavaScript之間的通訊的問題(Flash在Web瀏覽器中執行JavaScript聲明)。但是,fscommand()函數的功能實際上要比這些強大得多。不用太多的細節描述,以下是fscommand()函數簡短的概述:



「fscommand()」是Flash中一個函數的名字,它提供Flash 應用程序的通訊功能(「應用程序」的意思是任何可以播放Flash媒體的工具,無論是自然的,例如標準的獨立的Flash Player播放器;還是插件的使用,例如Web瀏覽器)。例如,基於Web的fscommand()函數可以響應Flash按鈕的click事件,執行JavaScript命令。(一會我們將看到JavaScript也可以控制Flash影片的回放功能)。Fscommand()函數也可以和Lingo語言通訊,並且也可以發送內建的命令集到Flash Player播放器中(例如「Quit」,「FullScreen」,「AllowScale」,「ShowMenu」)。





對FS Command命令的支持



好了,讓我們回到主題:在Web中使用fscommand()函數。如果你打算為Web開髮帶有腳本的Flash影片,你必須意識到不是所有的瀏覽器都支持fscommand()函數。支持該函數的特殊瀏覽器有:



·netscape 3 or 4 on win95/98/nt and mac ppc

·internet explorer 3 and greater on win95/98/nt

·netscape 6.2 (and later) running flash player 6.0.40.0 (and later)



特殊的不支持fscommand()函數的瀏覽器有:



·運行在 windows 3.1上的瀏覽器

·運行在 macintosh 68k 機器上的瀏覽器

·任何在Mac上運行的IE

·netscape 6.1 和 6.0 運行 flash player 6.0.29.0 或者比較老的版本 (liveconnect 屬性不支持mozilla遺留下來的插件。 使用mozilla需要更新插件,可以到這裡去更新插件 mozilla plugin api (http://www.mozilla.org/docs/plugin.html)). 察看 bugs 37710 (http://bugzilla.mozilla.org/show_bug.cgi?id=37710) 和 18838 (http://bugzilla.mozilla.org/show_bug.cgi?id=18838).



不支持的瀏覽器缺少Active X(IE)或者LiveConnect(Netscape 4和更老的版本),要實現在插件和瀏覽器之間的通訊這些是必需的。此外,對於Flash 3,如果你正為Netscape 4開發包含fscommand 的Flash內容,你需要在每個頁面明確的使用LiveConnect來管理包含腳本的Flash影片(你不必在Netscape 6.2和以後的版本使用LiveConnect)。對於支持LiveConnect的瀏覽器,應把這一屬性包含在你的影片的EMBED 標籤中,例如 swLiveConnect = 「true」。 在執行的過程中,用戶將在Netscape狀態欄中看到 」Starting Java…」,並且當Java加載時要等待一會。





通訊的兩個方向



那麼現在,我們知道了在哪裡可以使用fscommand函數的功能;你也許想知道它是怎樣工作的。我們首先檢測基於fscommand功能的Flash到JavaScript的通訊。然後,我們將再看看發送信息的另一種方法:JavaScript到Flash的通訊。





怎樣實現Flash 到 JavaScript的通訊



(在研究用fscommand()函數執行JavaScript代碼之前,應該注意的是JavaScript也可以通過getURL()函數來調用,就像用錨標記調用JavaScript一樣)。GetURL()函數與fscommand()函數相比,會獲得更廣泛的瀏覽器的支持,暫且不提它為編碼帶來的便利。要瞭解更多的信息,參考用JavaScript調用getURL函數來開啟一個窗口。現在讓我們回到對fscommand()函數的討論中)。



無論fscommand()函數是否執行,Flash都試圖發送消息給JavaScritp。當瀏覽器收到一個來自Flash的fscommand命令,它會檢測:是否存在一個與之匹配的JavaScript函數(或者IE瀏覽器中VB Script函數),該函數可以「捕獲」fscommand命令。如果存在這樣的函數,瀏覽器將執行這個「捕獲」函數,並且發送兩個參數給這個函數——這兩個參數就是fscommand() 函數中「Command」和「Arguments」參數。



如下所示得圖表圖解了這個過程,該範例用fscommand()函數來調用JavaScript警告框。Fscommand的參數是」call_alert」和」Hello world!」,



如下所示:



fscommand(「call_alert」, 「Hello world!」);



執行這個fscommand命令在Netscape和IE中有略微不同;下面的圖示顯示了該命令在兩個瀏覽器中的傳遞(從Flash到JavaScript)。圖示下面是相應的Flash範例,看看這個模型,我們接來就分析實現這一功能的細節。

觀看演示文件 (http://moock.org/webdesign/flash/fscommand/)

FS Command影片範例:Flash調用JavaScript警告框 (http://moock.org/webdesign/flash/fscommand/flash-to-javascript.html)



讓我們一起完成如上圖所示的Flash調用JavaScript的FS Command方法。你可以下載這個範例1的Zip文件 (http://moock.org/webdesign/flash/fscommand/fscommand-sample1.zip),它包括.fla,.swf和.html格式文件。具體操作如下(請注意:以下操作均在 Flash MX Professional 2004中進行):



1)在Flash中建立FS Command語句:



·新建一個影片,在時間線上開始的幾楨上隨意設置一個關鍵楨;



·選中該關鍵楨,按F9,打開動作面板;



·在動作面板中點擊「動作」下面的「+」按鈕,選擇「全局函數」---「瀏覽器/網絡」---fscommand()函數。然後,「fscommand」命令便加入到動作列表中。該函數參數包括兩個部分「Command」和「Arguments」。這兩個參數將被傳遞到JavaScript的「fscommand捕獲」函數中。它們可以用在任何條件下,但是通常情況下,Command參數包含一個你想執行的函數名稱;Arguments參數包含你提供的參數;



·在括號中輸入「"call_alert", "Hello world!"」;



2)把你的影片嵌入到HTML文檔中:



為你的影片建立一個HTML文檔,並且使用OBJECT 和EMBED標記放置你的影片。在OBJECT 和EMBED標記中,確定你影片的名字,為OBJECT標記使用」ID」,為EMBED標記使用」NAME」。影片的名字是非常重要的,因為這個名字將被OBJECT 和EMBED標記識別出來。你的FS Command捕獲函數將依靠影片的名字來識別所有捕獲的FS Command命令。另外要記住的是對於Netscape瀏覽器的LiveConnect參數用「swLiveConnect = 「true」」來替換。你的頁面應該像下面這樣(ID、NAME和swLiveConnect都加粗了,不要忘記它們):







My First FS Command










CLASSID="clsid : D27CDB6E-AE6D-11cf-96B8-444553540000"

WIDTH="100%"

HEIGHT="100%"

CODEBASE="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"

ID=testmovie>














NAME="testmovie"

SRC="mymovie.swf"

WIDTH="100%"

HEIGHT="100%"

PLAY="false"

LOOP="false"

QUALITY="high"

SCALE="SHOWALL"

swLiveConnect="true"

PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">











3)為IE瀏覽器加入VB Script代碼:



還記得在圖示1中的第2個場景嗎?IE瀏覽器使用很小的VB Script代碼來捕獲fscommand命令,然後把它傳遞給JavaScript。這就是接下來你要做的。把如下的VB Script代碼放在HTML文檔的HEAD標記內,確定把文字「testmovie」改為你在OBJECT 和EMBED標記為你的影片起的名字。







4)加入JavaScript函數來捕獲fscommand命令:



到目前為止,我們已經建立了影片,它可以發送fscommand命令到瀏覽器上;影片也已經被嵌入到HTML頁面中,也建立了VB Script代碼,它可以為JavaScript捕獲fscommand命令——如果你的瀏覽器是IE的話。把如下的JavaScript代碼放到HEAD標記中,確定把文字「testmovie」 改為你在OBJECT 和EMBED標記為你的影片起的名字。







對於JavaScript的一點解釋。「testmovie_DoFSCommand」函數隨時調用名稱為「testmovie」的發送fscommand命令的影片。「DoFSCommand」 關鍵字是Flash用來識別的函數,該函數被fscommand命令加載。前綴「testmovie_」指出被命令調用的影片的名稱。因此,當一個名為「testmovie」的影片調用FS Command命令時,名為「testmovie_DoFSCommand」的函數將被加載。「(command, args)」是傳遞給函數的兩個參數,並傳送我們在Flash動作面板輸入的 「Command」和「Arguments」的參數值——「call_alert」和「Hello world!」



一旦你的JavaScript函數放置好了,你的FS Command函數就可以成功的加載警告框了。

你已經學會了如何從Flash向JavaScript發送信息。如果你想進一步瞭解以上的內容,記得下載範例1的Zip文件。接下來你將學會怎樣用JavaScript控制Flash。







怎樣實現 JavaScript 到 Flash 的通訊



通過調用Flash影片對象的內建的方法,JavaScript可以向Flash發送命令。調用Flash方法的操作就像所有的調用JavaScript內建的方法一樣(比如:document.write()或者window.close())。從開發者的角度來看,這種通訊的方式是在一端通過JavaScript方法完全控制Flash影片,在Flash影片中不需要額外添加代碼。



我將演示一個簡單的範例:通過調用JavaScript的Flash方法控制影片。然後你就可以推斷這種技術並應用於任何可用的Flash方法中(完整的關於Flash 2.0和Flash 3.0的方法,請參閱Macromedia Flash方法的參考文檔 (http://www.macromedia.com/support/flash/how/subjects/scriptingwithflash/scriptingwithflash04.html))。來看看這個範例文件:JavaScript控制Flash。



範例2:JavaScript控制Flash影片 (http://moock.org/webdesign/flash/fscommand/javascript-to-flash.html)



接下來的步驟講解了怎樣實現這一技術,作為參考,你可以下載本例的Zip文件 (http://moock.org/webdesign/flash/fscommand/javascript-to-flash.zip)。



1)在HTML文檔中嵌入你的影片



建立一個HTML文檔,並用OBJECT 和 EMBED 標記把你的影片置入到文檔內。注意你的OBJECT 和 EMBED 標記內部,確定為OBJECT標記使用」ID」,為EMBED標記使用」NAME」。你的影片的名稱是非常重要的,因為它們將被識別出來。你的JavaScript函數要通過影片的名稱控制它。也要記住的是對於Netscape瀏覽器的LiveConnect參數用「swLiveConnect = 「true」」來替換。你的頁面應該像下面這樣(ID、NAME和swLiveConnect都加粗了,不要忘記它們):







JavaScript controls Flash










CLASSID=" clsid : D27CDB6E-AE6D-11cf-96B8-444553540000"

WIDTH="100%"

HEIGHT="100%"

CODEBASE=" http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"

ID=testcommand>














NAME="testcommand"

SRC="mymovie.swf"

WIDTH="100%"

HEIGHT="100%"

PLAY="false"

LOOP="false"

QUALITY="high"

SCALE="SHOWALL"

swLiveConnect="true"

PLUGINSPAGE=" http://www.macromedia.com/go/getflashplayer">











2)增加一個跨瀏覽器的函數來查詢你的影片對像



有兩個主要的組成部分來實現JavaScript對Flash的調用:⑴調用Flash方法的函數;⑵為查詢Flash影片對像返回恰當語句的函數。別指望Microsoft和Netscape採用相同的方法來執行這些操作。因此,首先你需要做的就是添加的正確語句(為Netscape 的"document[moviename]" 和為微軟IE的 "window[moviename]")。只需要編寫少量的代碼,然後把它放入對Flash調用方法的腳本中,你不用考慮它的兼容性。當我們調用任何Flash方法時,我們將調用這個兼容性函數,代碼如下:







稍等一下,還沒有這樣操作。如果調用一個還沒有完成加載的影片的方法,會發生什麼呢?錯誤!這就是所得到的結果。所以你應該檢查:



⑴影片對象是否存在;

⑵執行方法前是否有足夠的加載。



最簡單、最可靠方式檢查這兩個條件的方法就是在影片加載完成以後,設置一個JavaScript變量。在直執行任何JavaScript方法之前,你可以檢查這個變量。然而,你也可以用JavaScript評估影片對象,檢查影片的加載狀態;然後調用「PercentLoader()」方法。以下就是完成這一功能的函數:



// Checks if movie is completely loaded.

// Returns true if yes, false if no.

function movieIsLoaded (theMovie) {

// First make sure the movie's defined.

if (typeof(theMovie) != "undefined") {

// If it is, check how much of it is loaded.

return theMovie.PercentLoaded() == 100;

} else {

// If the movie isn't defined, it's not loaded.

return false;

}

}



你也可以在掉用任何方法前,用movieIsLoaded()函數來檢查影片的加載狀態,像這樣:



function playmovie() {

if (movieIsLoaded(thisMovie(movieName))) {

thisMovie(movieName).Play();

}

}



4)增加一個事件給調用Flash方法的函數



目前你的函數已經準備好控制Flash影片了,你所需要的就是調用它。為了檢測的目的,我用一個表單按鈕來調用Flash函數:











可取的 Flash JavaScript 方法



你已經學會了怎樣調用一個JavaScript方法播放Flash影片。你也可以使用相同的技術來調用任何Flash Player支持的JavaScript方法。可以的Flash 2.0 和3.0版本的方法(未譯)已經在下邊列出來了,其他的方法則要根據最新的Flash Player版本而定。如果你使用Tell Target方法發送JavaScript命令給Flash影片剪輯,要注意點,這個方法比較麻煩……



關於「可取的 Flash JavaScript方法」和「相關內容參考」兩部分內容請大家自己去瀏覽作者的網站吧,這對深入理解fscommand()函數的用法很有意!:)引用自:

狼翔月影 發表在 痞客邦 PIXNET 留言(0) 人氣()