Flex与JavaScript交互


早就再留意Flex与Js的交互方式了,网上看了就三两句代码就解决了,从前对此比较不屑,自认为什么时 候想用了花个5分钟看看就搞定了。

今天终于静下来自己测试和整理了下,才发现其实要调试成功并没那么简单,这几行代码折腾了我大半天 真是的。

下面我把我的测试代码和心得和大家分享下:

Js2Flex.mxml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp()">  
  3.      <mx:Script>  
  4.         <!--[CDATA[  
  5.             import mx.controls.Alert;     
  6.             
  7.             public function flexHelloWorld(param1:String, param2:String):String {     
  8.                   Alert.show("param1: " + param1 + "; param2:" + param2);     
  9.                return "Hello " + param1 + param2;     
  10.             }     
  11.                  
  12.             public function initApp():void {     
  13.                 ExternalInterface.addCallback("flexHelloWorld", flexHelloWorld);     
  14.             }     
  15.                  
  16.             public function jspHello():void {     
  17.                var s:String = ExternalInterface.call("hello", "Flex");     
  18.                 Alert.show(s);     
  19.            }       
  20.         ]]-->  
  21.      </mx:Script>  
  22.     <mx:Button x="52" y="58" label="call javascript" click="jspHello()"/>   
  23. </mx:Application>  
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp()"> <mx:Script> <!--[CDATA[ import mx.controls.Alert; public function flexHelloWorld(param1:String, param2:String):String { Alert.show("param1: " + param1 + "; param2:" + param2); return "Hello " + param1 + param2; } public function initApp():void { ExternalInterface.addCallback("flexHelloWorld", flexHelloWorld); } public function jspHello():void { var s:String = ExternalInterface.call("hello", "Flex"); Alert.show(s); } ]]--> </mx:Script> <mx:Button x="52" y="58" label="call javascript" click="jspHello()"/> </mx:Application>  

testSwf.html

  1. <html>  
  2. <head>  
  3. <mce:script type="text/javascript" src="swfobject.js" mce_src="swfobject.js"></mce:script>  
  4. </head>  
  5. <body>  
  6. <div id="flashcontent">  
  7. This text is replaced by the Flash movie.  
  8. </div>  
  9. <br>  
  10. <input type=button value="Call Flex" οnclick="callflex()"/>  
  11. <mce:script language="javascript"><!--  
  12. var so = new SWFObject("Js2Flex.swf", "flexObject", "640", "300", "7", "#336699");  
  13.   so.write("flashcontent");  
  14. function hello(param) {      
  15.      return "jsp Hello:" + param;     
  16.     }     
  17.      
  18. function callFlexFunction() {    
  19.      var fl = document.getElementById("flexObject");  
  20.     var x= fl.flexHelloWorld("Hello", "world");      
  21.    }    
  22. function callflex()  
  23. {  
  24. callFlexFunction();  
  25. }  
  26. // --></mce:script>  
  27. </body>  
  28. </html>   
<html> <head> <mce:script type="text/javascript" src="swfobject.js" mce_src="swfobject.js"></mce:script> </head> <body> <div id="flashcontent"> This text is replaced by the Flash movie. </div> <br> <input type=button value="Call Flex" οnclick="callflex()"/> <mce:script language="javascript"><!-- var so = new SWFObject("Js2Flex.swf", "flexObject", "640", "300", "7", "#336699"); so.write("flashcontent"); function hello(param) { return "jsp Hello:" + param; } function callFlexFunction() { var fl = document.getElementById("flexObject"); var x= fl.flexHelloWorld("Hello", "world"); } function callflex() { callFlexFunction(); } // --></mce:script> </body> </html>  

其实交互主要是通过 Flex自带接口ExternalInterface的addCallback和call方法来实现的,一个是命名方法代理,一个是条用Js方法。然后通 过swfobject.js自带的方法嵌入swf实现Flex和JavaScript的无缝交互

注意:一定要到网上下载swfobject.js,然后再<head>内导入,然后用new SWFObject()嵌入swf,用<html>的<object><embed>嵌入的swf无法传递参数,这 个就是为什么我弄了大半天没调试成功的原因,这个原因还没弄明白,不过swf还是尽量用js来嵌入,这样更符合html标准。

还有就是如果把生成的swf更换目录 然后本地调试会有安全沙箱问题,所以最好在服务器上调试。

转载于:https://www.cnblogs.com/nianshi/archive/2010/05/13/1734356.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值