加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flash(ActionScript,AS) & JavaScript通信浅谈

发布时间:2020-12-15 19:52:44 所属栏目:百科 来源:网络整理
导读:摘要: 本文主要阐述两个问题:①如何进行Flash编程;②Flash(.swf)如何与JavaScript通信? 这里牵涉到一门语言——ActionScript。 关于它,百科上是这么说的,ActionScript(简称AS)是由Macromedia(现已被Adobe收购)为其Flash产品开发的 ,最初是一种简

摘要:本文主要阐述两个问题:①如何进行Flash编程;②Flash(.swf)如何与JavaScript通信?这里牵涉到一门语言——ActionScript。关于它,百科上是这么说的,ActionScript(简称AS)是由Macromedia(现已被Adobe收购)为其Flash产品开发的 ,最初是一种简单的脚本语言,现在最新版本ActionScript3.0,是一种完全的面向对象的编程语言,功能强大,类库丰富,语法类似JavaScript,多用于Flash互动性、娱乐性、实用性开发,网页制作和RIA(丰富互联网程序)开发。


目录:

-------------------------------------------

- 工欲善其事必先利其器

- ActionScript与JavaScript函数绑定

? ? - ExternalInterface.addCallback(Js调用As)

? ? - ExternalInterface.call(As调用Js)


1.工欲善其事必先利其器

ActionScript或者说是Flash是使用什么编程工具呢?也可以直观的说.swf文件,是如何生成的?需要明白两点:①平时用户安装的“Adobe Flash Player for IE”,其实是一个播放网页Flash的插件。按道理来说Flash应该也是遵循NPAPI协议开发的(早期插件开发协议,先已经逐渐被PPAPI替代)。②Flash CSX系列开发工具,Flash Builder等等,这些很大,功能很强,可以进行全面的Flash动画开发。


但是,本文只牵涉到网络通信方面的,不涉及任何动画开发内容。推荐一款轻量级工具:FlashDevelop+Flex SDK,这是一款很好的swf开发工具。


环境配置十分之简单,①从网上搜索FlashDevelop下载、安装 ---> ②从AppMan中选择Flex SDK(OLD)安装(如下图)。整个过程个人感觉和AndroidStudio差不多,这里需要注意的是,默认路径是../AppData/Local/FlashDevelop/Apps,可以自行在菜单栏Tools中进行修改,一般直接使用即可,不要进行修改。


OK,让我们新建一个AS3.0项目,开始Flash开发之旅。



2.ActionScript与JavaScript函数绑定

Flash与JavaScript如何通信?这是本文的核心。涉及到一个绑定机制,先放个烟雾弹... ?看完以下两个函数再继续拆除烟雾弹。

(注意,以下这两个方法都是写在.as中,非js)

//①

ExternalInterface.addCallback("send",send);

//②

ExternalInterface.call("onMessage",e.data);

你很聪明,可能根本不需要再看下文了,已经明白了其中的奥妙。


2.1?ExternalInterface.addCallback(Js调用As)

ExternalInterface.addCallback:有两个参数,第一个参数“send”——指定的是JavaScript函数名;第二个参数send——指定的是AS中的函数名(AS中必须有该函数的实现体,如下)。

///发送数据
public function send(sendMsg:String = null):void{
? ? ? ? ? if (g_tcp_xml_socket.connected){
? ? ? ? ? ? ? ? g_tcp_xml_socket.send(sendMsg);
? ? ? ? ? }
}

如此一来,在JavaScript中就可以来一波这样的操作了...

var swf = swfobject.getObjectById('XXXFlash');//swf的名称

///发送消息
function send(data){
try{
swf.send(data);
}
catch(exception){
alert('send socket error.');
}
}


回顾一下,也算是对上文的总结:首先JavaScript加载swf文件(获得swf对象);接着JavaScript通过swf对象,再调用send方法;而"send"方法在AS中已经被绑定到send方法上了,这样就会执行AS中的send方法。至此,一套完整的JavaScript调用ActionScript方法的流程就跑通了。


2.2?ExternalInterface.call(As调用Js)

来而不往非礼也,ActionScript如何调用JavaScript呢?也是一个绑定过程?ExternalInterface.call("onMessage",e.data); 这里的onMessage是一个JavaScript中的函数名,

///消息体
function onMessage(data){

}

仅一条语句,就实现了As调用Js方法。同时,也可以注意到,ExternalInterface.call 方式还完美的实现了,参数的传递。

文中尚未对swf到底如何加载进行阐明?后续的文章中将对其说明............


@qingdujun

2017-8-23 于湖南邵阳

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读