1. 程式人生 > >靜態引數傳遞的幾種方式

靜態引數傳遞的幾種方式

靜態傳值是區別於與服務端通訊進行值傳遞的方式,例如LoadVars,XML,Remoting之類,後者暫且不在本文的討論範圍內,當你想讓FLASH獲取URL中的引數時,你為何不換個角度想了?其實我們可以讓服務端動態生成SWF的的插入程式碼,主動將我們需要的引數“靜態”傳遞給FLASH,FLASH直接用就可以了,根本不需要自己去拿,而以何種形式傳遞給FLASH,就是我所指的靜態傳值。我知道的可行的HTML與FLASH之間的靜態傳值方法有三種: SWF地址後使用引數傳遞符“?” FlashVars傳遞 JS控制   下面來具體介紹下這三種方式的傳遞是如何工作的:  

一、SWF地址後使用引數傳遞符“?”

  我們知道,在ULR地址中使用引數傳遞符“?”可以以GET方式傳遞引數,例如http://www.v-sky.com?uid=12&uname=vsky,這裡使用了引數傳遞符“?”,同時使用了連線符“&”做為變數分隔標識,以這種規範的格式來傳遞兩個引數:uid=12和uname=vsky,那麼服務端可以使用GET方式獲取這兩個值。  在FLASH中我們同樣可以採用類似的方式來傳遞引數,HTML頁面中插入SWF檔案最常用的就是使用object標籤和embed標籤結合的方式,這也是Adobe的推薦方式:   <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="demo.swf?uid=12&uname=vsky" /> <param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <e

mbed src="demo.swf?uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>

  其中粗體部分對應的就是SWF檔案的地址,那麼我們可以在這個地址後面通過類似於URL中GET方式傳參的方法來個SWF傳遞引數,例如上面程式碼在頁面完全載入完畢時,它已經給SWF檔案寫入了兩個變數:uid=12和uname=vsky。

二、FlashVars傳遞

  你可以查閱FLASH幫助文件來看FlashVars的官方定義。其實在HTML語法中,這是一個被很多新手所忽視的屬性,同樣以上面的引數為例,下面用FlashVars來傳遞變數:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="demo.swf" /> <param name="FlashVars" value="uid=12&uname=vsky" /> <param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <embed src="demo.swf" FlashVars="uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>

  跟方式一相同,它也是直接給FLASH裡添加了這兩個變數。但我個人推薦使用此方式,結合SWFobject的使用,使用FlashVars來傳遞變數有很多好處,例如程式碼清晰,容易管理,瀏覽其相容,符合標準。他們的結合使用在“為FLASH程式構造靈活的介面”一文中我已經做了介紹(PS:隨後我會提供一個複雜點的、有說服力的實際應用來說明這種靈活介面的使用)。  

三、JS控制

  對於客戶端頁面中的資源,JS通過DOM結構來控制它們可以說是隨心所欲的,FLASH也不例外,下面是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的指定屬性

  在這裡我們只需要使用的是粗體標識的SetVariable方法,JS通過呼叫此方法能夠直接更改SWF中的變數值。首先我們需要定義插入的SWF的ID,例如id為VskyDemo,那麼我們可以通過下面的JS語句來完成SWF內部變數的設定:

window.document.VskyDemo.SetVariable("uid", 12);

  很簡單吧,就是這樣的。除非是涉及到了HTML中SWF之外元素跟它互動,否則我一般不使用JS來控制SWF裡的變數,因為我總覺得怪怪的,呵呵,個人習慣吧。  多多實踐,不要覺得這些小東西不起眼,小東西多了,聚結到一起了就是一個大的應用。