在各种浏览下html嵌入flash/flex以及flex和java相互调用的简单例子 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" id="myFlashMovie" width=”100%” height=”100%” type=”application/x-oleobject”> <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” flashvars=” onload=testPageInit” loop=”false” wmode=” transparent” allowScriptAccess=” sameDomain” pluginspage=http://adobe.com/go/getflashplayer> </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方法的例子流程 上面举的例子的功能是通过外面传个值来改变FLEX内部一个变量的值 首先html页面加载页面元素,将object加载进来,加裁object后通过onload方法自动调用javascript方法testPageInit(); 其次在testPageInit()方法里我们要调用对象ID为myFlashMovie的flex内部方法,要获取object的对象通过用document.getElementById(“myFlashMovie”)这个方法来获得,但是考虑到跨浏览器的问题我们采用以下任意一种方式来获取ID, 一是window.document[“myFlashMovie”] (在IE,FF,chrome,opera,safari等都适用) 二是window.document. myFlashMovie(这个未度过,应该可以) 然后通过定义的“object变量.方法”的形式调用即可,通过传递的参数给FLEX内部方法传值。 再然后,flex内部方法是如何获得到外部javascript的调用呢?首先加载flex的时候会运行flex 的主应用程序,我们可以在主应用程序加裁完之后提供一个自动调用初始化方法,在这个方法里来回调javascript方法就可以了。具体参考上面的例子如ExternalInterface.addCallback(“setTestValue”, setTestValue); 最后通过调用setTestValue方法来改变FLEX当前_testValue变量的值。 2. html嵌入flex,由FLEX来调用 javascript的例子流程 上面实现的功能是在flex中点击一个按钮就会使html的标题名称发生改变。 首先html页面加载页面元素,将object加载进来,加裁object后通过onload方法自动调用javascript方法testPageInit(); 其次在testPageInit()方法里我们可以调用对象FLEX内部方法(参考上面流程例子)也可以不调用,我们这个例子主要是在FLEX调用JAVASCRIPT,当全部加载完了FLEX,在FLEX里我们可以加一个按钮控件用于点击测试,来触发方法,此方法里具体写如何调用JAVASCRIPT方法(参考上面代码)。 并且在JAVASCRIPT中定义和changePageTitleName名字一样的方法。 讨论: 1. 我发现当需要获取object对象时用window.document[“myFlashMovie”];才能在跨浏览器时获得到对象。 2. 当要对object对象进行显示时用document.getElementById(“myFlashMovie”).style.display=””;才好使,当要隐藏时用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参数要用。保持object 中的<param>的参数项和参数值和embed里的参数相同。 |
|