在各種瀏覽下html嵌入flash/flex以及flex和java相互調用的簡(jiǎn)單例子
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>
注意事項:
1. html嵌入flex調用在javascript中調用flex方法的例子流程
上面舉的例子的功能是通過(guò)外面傳個(gè)值來(lái)改變FLEX內部一個(gè)變量的值
首先html頁(yè)面加載頁(yè)面元素,將object加載進(jìn)來(lái),加裁object后通過(guò)onload方法自動(dòng)調用javascript方法testPageInit();
其次在testPageInit()方法里我們要調用對象ID為myFlashMovie的flex內部方法,要獲取object的對象通過(guò)用document.getElementById(“myFlashMovie”)這個(gè)方法來(lái)獲得,但是考慮到跨瀏覽器的問(wèn)題我們采用以下任意一種方式來(lái)獲取ID,
一是window.document[“myFlashMovie”] (在IE,FF,chrome,opera,safari等都適用)
二是window.document. myFlashMovie(這個(gè)未度過(guò),應該可以)
然后通過(guò)定義的“object變量.方法”的形式調用即可,通過(guò)傳遞的參數給FLEX內部方法傳值。
再然后,flex內部方法是如何獲得到外部javascript的調用呢?首先加載flex的時(shí)候會(huì )運行flex 的主應用程序,我們可以在主應用程序加裁完之后提供一個(gè)自動(dòng)調用初始化方法,在這個(gè)方法里來(lái)回調javascript方法就可以了。具體參考上面的例子如ExternalInterface.addCallback(“setTestValue”, setTestValue);
最后通過(guò)調用setTestValue方法來(lái)改變FLEX當前_testValue變量的值。
2. html嵌入flex,由FLEX來(lái)調用 javascript的例子流程
上面實(shí)現的功能是在flex中點(diǎn)擊一個(gè)按鈕就會(huì )使html的標題名稱(chēng)發(fā)生改變。
首先html頁(yè)面加載頁(yè)面元素,將object加載進(jìn)來(lái),加裁object后通過(guò)onload方法自動(dòng)調用javascript方法testPageInit();
其次在testPageInit()方法里我們可以調用對象FLEX內部方法(參考上面流程例子)也可以不調用,我們這個(gè)例子主要是在FLEX調用JAVASCRIPT,當全部加載完了FLEX,在FLEX里我們可以加一個(gè)按鈕控件用于點(diǎn)擊測試,來(lái)觸發(fā)方法,此方法里具體寫(xiě)如何調用JAVASCRIPT方法(參考上面代碼)。
并且在JAVASCRIPT中定義和changePageTitleName名字一樣的方法。
討論:
1. 我發(fā)現當需要獲取object對象時(shí)用window.document[“myFlashMovie”];才能在跨瀏覽器時(shí)獲得到對象。
2. 當要對object對象進(jìn)行顯示時(shí)用document.getElementById(“myFlashMovie”).style.display=””;才好使,當要隱藏時(shí)用document.getElementById(“myFlashMovie”).style.display=”none”;才好使。用window.document[“myFlashMovie”] .style.display=””;或window.document[“myFlashMovie”] .style.display=” none”;不好使。
3. 對于IE來(lái)講不需要embed部分也可以得到flex,但對于其他的瀏覽可能不兼容所以需要走embed部分,在這里需要指定id和name且名稱(chēng)一樣,而且flashvars參數要用。保持object 中的<param>的參數項和參數值和embed里的參數相同。
聯(lián)系客服