AS和JS互相调用有个很酷的特性

By:ooboy.net Date:2009-04-26

JavaScript和ActionScript互相调用时,其实有个非常好的特性,不过貌似很少有人提到这个 特性:它们之间的数据类型对方均可以识别。因此,你可以通过swf提供的接口来传递对象、数组、字符串等等。不过它们之间传递的参数的值的长度有限制(具 体长度还没仔细测试),因此你不能把JavaScript中的一个超大的对象直接传递进去。不过即使是这样,已经非常好用了,看看示例代码:
as2 代码:

  1. import flash.external.*;
  2. // 创建一个行的TextField来显示调用结果
  3. var t:TextField = this.createTextField('t', this.getNextHighestDepth(), 1010300200); 
  4. t.text = 'ready';
  5. // 这个是要给JavaScript调用的函数
  6. function test(obj){
  7.     var s = [];
  8.     for(var p in obj){
  9.         s.push(p + ': ' + obj

    );

  10.     }
  11.     t.text = s.join('\r\n');
  12. }
  13. // 添加调用接口
  14. var testsuc:Boolean = ExternalInterface.addCallback("test", null, test);
  15. t.text = ['test: ', testsuc].join('\n');
  16. // 调用JavaScript,告诉JavaScript我已经准备好了
  17. ExternalInterface.call('ready', {a:'a string', b:'string b'});

JavaScript代码:

  1. var swfId = 'call_swf'
  2. function ready(){
  3.     // 获取flash传递过来的参数
  4.     var o = arguments[0];
  5.     var s = [];
  6.     for(var p in o){
  7.         s.push([p, ': ', o

    ].join(''));

  8.     }
  9.     // 打印传递进来的对象的内容
  10.     alert(s.join('\n'));
  11.     
  12.     var swf = document[swfId] ? document[swfId] : window[swfId];
  13.     // 调用flash提供的接口
  14.     swf.test({a:'a string', b:'string b'});
  15. }
参与讨论去: 艾睿(Airia) 交朋友去:友吧推荐文章去:网站贴吧
企业招聘

北京中视力天文化传媒有限公司

公司简介:北京中视力天文化传媒有限公司,是CCTV.com央视国际网络有限公司投资的互联网研发团队。我们是天使的使者。。。

招聘FlashAS程序员详情点击

Copyright 2007-2008 51AS.com Extended in kingcms 鲁ICP备06001158号