在各種瀏覽下html嵌入flash/flex以及flex和java相互調(diào)用的簡單例子
JAVA參考代碼:
<!-- javascript 代碼如下-->
<script type=”text/javascript”>
function testPageInit(){
alert(“hello flash”);
var myFlashMovie=window.document[“myFlashMovie”];
var dataStr=”10,20,30”
myFlashMovie.setTestValue(dataStr);
}
function changePageTitleName(){
document.title=”Flex Changed the Title”;
}
</script>
<!-- html 代碼如下-->
<table width=”100%” height=”100%”>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase=http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab
id="myFlashMovie" width=”100%” height=”100%” type=”application/x-oleobject”>
<param name=”movie” value="test.swf"/>
<param name=”quality” value="high"/>
<param name=”wmode” value="transparent"/>
<param name=”bgcolor” value="#869ca7"/>
<param name=”allowScriptAccess” value="sameDomain"/>
<param name=”FlashVars” value="onload=testPageInit"/>
<embed src="test.swf"
width=”100%” height=”100%” type="application/x-shockwave-flash"
play=”true” name="myFlashMovie"
id="myFlashMovie" align=”middle” bgcolor=”#FFFFFF”
quality=”high”
flashvars=” onload=testPageInit”
loop=”false”
wmode=” transparent”
allowScriptAccess=” sameDomain”
pluginspage=http://adobe.com/go/getflashplayer>
</embed >
</object >
</table>
FLEX參考代碼:
<?xml version=”1.0” encoding=”utf-8”>
<mx:Application creationComplete=”init()” xmlns:mx=”http://www.adobe.com/2006/mxml”
Layout=”absolute”>
<mx:Script>
<![CDATA[
private var _testValue:String;
private function init():void{
ExternalInterface.addCallback(“setTestValue”, setTestValue);
}
public function setTestValue(str:String):void{
_testValue= str;
}
private function callJavascript():void{
var JSFunctionName:String=”changePageTitleName”;
ExternalInterface.call(JSFunctionName,””);
}
</mx:Script>
<mx:Button click=” callJavascript()”/>
<mx:Label text={_testValue}/>
</mx:Application>
注意事項(xiàng):
1. html嵌入flex調(diào)用在javascript中調(diào)用flex方法的例子流程
上面舉的例子的功能是通過外面?zhèn)鱾€值來改變FLEX內(nèi)部一個變量的值
首先html頁面加載頁面元素,將object加載進(jìn)來,加裁object后通過onload方法自動調(diào)用javascript方法testPageInit();
其次在testPageInit()方法里我們要調(diào)用對象ID為myFlashMovie的flex內(nèi)部方法,要獲取object的對象通過用document.getElementById(“myFlashMovie”)這個方法來獲得,但是考慮到跨瀏覽器的問題我們采用以下任意一種方式來獲取ID,
一是window.document[“myFlashMovie”] (在IE,FF,chrome,opera,safari等都適用)
二是window.document. myFlashMovie(這個未度過,應(yīng)該可以)
然后通過定義的“object變量.方法”的形式調(diào)用即可,通過傳遞的參數(shù)給FLEX內(nèi)部方法傳值。
再然后,flex內(nèi)部方法是如何獲得到外部javascript的調(diào)用呢?首先加載flex的時候會運(yùn)行flex 的主應(yīng)用程序,我們可以在主應(yīng)用程序加裁完之后提供一個自動調(diào)用初始化方法,在這個方法里來回調(diào)javascript方法就可以了。具體參考上面的例子如ExternalInterface.addCallback(“setTestValue”, setTestValue);
最后通過調(diào)用setTestValue方法來改變FLEX當(dāng)前_testValue變量的值。
2. html嵌入flex,由FLEX來調(diào)用 javascript的例子流程
上面實(shí)現(xiàn)的功能是在flex中點(diǎn)擊一個按鈕就會使html的標(biāo)題名稱發(fā)生改變。
首先html頁面加載頁面元素,將object加載進(jìn)來,加裁object后通過onload方法自動調(diào)用javascript方法testPageInit();
其次在testPageInit()方法里我們可以調(diào)用對象FLEX內(nèi)部方法(參考上面流程例子)也可以不調(diào)用,我們這個例子主要是在FLEX調(diào)用JAVASCRIPT,當(dāng)全部加載完了FLEX,在FLEX里我們可以加一個按鈕控件用于點(diǎn)擊測試,來觸發(fā)方法,此方法里具體寫如何調(diào)用JAVASCRIPT方法(參考上面代碼)。
并且在JAVASCRIPT中定義和changePageTitleName名字一樣的方法。
討論:
1. 我發(fā)現(xiàn)當(dāng)需要獲取object對象時用window.document[“myFlashMovie”];才能在跨瀏覽器時獲得到對象。
2. 當(dāng)要對object對象進(jìn)行顯示時用document.getElementById(“myFlashMovie”).style.display=””;才好使,當(dāng)要隱藏時用document.getElementById(“myFlashMovie”).style.display=”none”;才好使。用window.document[“myFlashMovie”] .style.display=””;或window.document[“myFlashMovie”] .style.display=” none”;不好使。
3. 對于IE來講不需要embed部分也可以得到flex,但對于其他的瀏覽可能不兼容所以需要走embed部分,在這里需要指定id和name且名稱一樣,而且flashvars參數(shù)要用。保持object 中的<param>的參數(shù)項(xiàng)和參數(shù)值和embed里的參數(shù)相同。