AS3和js相互通信要点分析
目标:在html页面里可以使用事件来影响到swf文件的内容,swf文件也可以影响html里js代码的内容
一。新建flash文件,用Flash CC试用版新建一个TextArea.fla的源文件,不添加任何组件,直接关联一个主类TextArea01,Flash会自动生成一个TextArea01.as的AS3源码文件。AS3代码如下:
package {
import flash.display.MovieClip;
import flash.display.StageScaleMode;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.desktop.*;
import flash.display.*;
import flash.external.ExternalInterface;
import fl.controls.Button;
public class TextArea01 extends MovieClip {
private var param:Object;
private var tf01:TextField;
private var btnCopyText:Button;
public function TextArea01() {
//this.stage.scaleMode = StageScaleMode.NO_SCALE;
//外部html参数
param = LoaderInfo(this.root.loaderInfo).parameters;
//初始化按钮
btnCopyText = new Button();
btnCopyText.label = "复制文字";
btnCopyText.width = 100;
btnCopyText.height = 22;
btnCopyText.x= 0;
btnCopyText.y = 0;
this.addChild(btnCopyText);
//"复制文字"按钮事件
this.btnCopyText.addEventListener(MouseEvent.CLICK,btnCopyClickListener);
//
tf01 = new TextField();
tf01.border = true;
tf01.y = this.btnCopyText.height;
tf01.width = this.stage.stageWidth-1;
tf01.height = this.stage.stageHeight-this.btnCopyText.height;
this.addChild(tf01);
var txt:String = param["txt"]; //flashvars的txt参数
if ( txt!=null && txt.length>0 ) {
tf01.text = txt;
}else{
tf01.text = "请输入参数txt";
}
//添加给javascript使用的函数,注册名为"onAddTextContentByJs", 实际调用内部"Tf01AddContent"函数
ExternalInterface.addCallback("onAddTextContentByJs",Tf01AddContent);
}
/**
* 修改文字内容
*/
public function Tf01AddContent(s:String):void{
this.tf01.text = s;
}
/**
* "复制文字"按钮事件
*/
public function btnCopyClickListener(e:MouseEvent):void{
var text:String = this.tf01.text;
if ( text.length>0){
Clipboard.generalClipboard.clear();
var res:Boolean = Clipboard.generalClipboard.setData(ClipboardFormats.TEXT_FORMAT, text);
if ( res && ExternalInterface.available){
//调外部javascript的swfCopySuccess函数,传送第一个参数为"复制成功"
ExternalInterface.call("swfCopySuccess","复制成功");
}
}
}
}
}
回到Flash主场景页面,按Ctrl+Enter就可以生成一个swf文件,文件名:TextArea.swf
二.用swfobject.js组件导入TextArea.swf到html页面(swfobject有swfobject_generator自动生成html功能,可自行下载最新版的swfobject.js,里面包有), html+js代码如下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="../assets/js/common.js"></script>
<script type="text/javascript" src="../assets/js/swfobject/swfobject.js"></script>
<script type="text/javascript">
var swfid = "myFlashContent";
swfobject.registerObject(swfid, "11.0.0", "expressInstall.swf");
</script> </head>
<body>
<div>
<button onClick="callAs3();">修改文字</button>
</div>
<div>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="800" height="600" name="myFlashContent" id="myFlashContent">
<param name="movie" value="../assets/swf/TextArea.swf">
<param name="wmode" value="transparent">
<param name="flashvars" value="txt=flashvar的txt文字">
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="../assets/swf/TextArea.swf" width="800" height="600">
<param name="wmode" value="transparent">
<param name="flashvars" value="txt=flashvar的txt文字">
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player">
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div> <script language="javascript"> var e = document.getElementById(swfid);
alert(U.browser());
if ( U.browser()!='ie') {
e = document.getElementById(swfid).getElementsByTagName('object')[0];
console.log(e);
} function swfCopySuccess(msg){
alert(msg);
}
function callAs3(){
e.onAddTextContentByJs("JS添加的文字");
}
</script>
</body>
</html>
另有common.js的代码如下:
// JavaScript Document
var Utils = U = {};
//计数器
U.acc = 1; U.isempty = function(v){
if ( v == null ) return true;
if ( typeof(v) == 'string' ) {
if ( v.length<=0 ) return true;
} else if (typeof(v) == 'object'){
return $.isEmptyObject(v);
} else if ( typeof(v) == 'undifined' ){
return true;
} return false;
}; //判断浏览器
U.browser = function(){
if ( navigator.appName.indexOf('Microsoft')>-1){
return 'ie';
}else{
if ( navigator.userAgent.indexOf('Chrome')>-1 ) {
return 'chrome';
}else if(navigator.userAgent.indexOf('Firefox')>-1 ){
return 'firefox';
}else {
return 'unknow';
}
}
};
三,运行结果令人满意,整体兼容ie/firefox/chrome内核,如下图.


AS3和js相互通信要点分析的更多相关文章
- as3 与js相互通信
1.as和js通讯实例 如果as3调用 JAVA script 中的函数直接在as中添加 if (ExternalInterface.available) { ExternalInterf ...
- AS与JS相互通信(Flex中调用js函数)
转载自http://www.blogjava.net/Alpha/archive/2009/06/27/284373.html Flex中As调用Js的方法是: 1.导入包 (import f ...
- android + javascript 相互通信实例分析
1. AndroidManifest.xml中必须使用许可 "android.permission.INTERNET", 否则会出Web page not available错误 ...
- android和javascript之间相互通信实例分析
1. AndroidManifest.xml中必须使用许可 "android.permission.INTERNET", 否则会出Web page not available错误 ...
- 新人补钙系列教程之:AS 与 JS 相互通信
比较常用的,AS 调用 JS private function callJS():void{ ExternalInterface.addCallback("callbackQQPay&quo ...
- NanUI文档 - 如何实现C#与Javascript的相互通信
NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript的相互通信 如何处理NanUI中的下载过 ...
- iOS与JS相互传值与交互
JavaScriptCore是webkit的一个重要组成部分,主要是对JS进行解析和提供执行环境.iOS7后苹果在iPhone平台推出,极大的方便了我们对js的操作.我们可以脱离webview直接运行 ...
- 学习笔记:Linux下共享内存的方式实现进程间的相互通信
一.常用函数 函数系列头文件 #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> ft ...
- wmware 怎么 跟主机相互通信
VMnet1和VMware8其实就是软件模拟出来的两块网卡提供DHCP服务,两块网卡对应VMware的两种不同的模式VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转 ...
随机推荐
- Mac下输入法总是默认中文,怎么设置成英文的?
最近一同事在DreamWeaver里,写CSS样式的时候,默认总是中文,切到别的窗口,再切回来,就变成中文了,总要按一下切换键,时间长了特别烦人. 在网上找了一些方法,最后找到一个有效的. 总结一下就 ...
- ADB server didn't ACK
当我们通过eclipse开发Android应用时,会连接真机会使用模拟器进行仿真,有时候启动失败,会提示这样的错误. 工具/原料 Eclipse CMD命令窗口 方法/步骤 首先通过CMD启动adb服 ...
- 《C++ API设计》作者Martin Reddy访谈问题征集
Martin Reddy博士是软件行业的一名老兵,有着15年以上的从业经验,共撰写过40多篇论文,拥有3项软件专利,并与他人合著了Level of Detail for 3D Graphics.另外, ...
- 数据采集实践学习二(C#)
前一篇文章写到我获取数据的方式不是通过分析HTML获得,而是通过分析请求链接,然后模拟请求方法获取数据,这只是一种方法.而且是在我通过分析HTML获取不到的情况下,曲线救国,参考别人文章实现的.很高兴 ...
- arm 2440 linux 应用程序 nes 红白机模拟器 第4篇 linux 手柄驱动支持
小霸王学习机的真实手柄,实测CPU 占用 80% 接线图: 手柄读时序: joypad.c 驱动: 普通的字符设备驱动. #include <linux/module.h> #includ ...
- 【小梅哥FPGA进阶学习之旅】基于Altera FPGA 的DDR2+千兆以太网电路设计
DDR2电路设计 在高速大数据的应用中,高速大容量缓存是必不可少的硬件.当前在FPGA系统中使用较为广泛的高速大容量存储器有经典速度较低的单数据速率的SDRAM存储器,以及速度较高的双速率DDR.DD ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式 2 (转)
本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apa ...
- 移动端页面去掉click点击 背景色变化
a,input,em,h2{-webkit-tap-highlight-color:rgba(255,0,0,0);}给点击元素加上样式 :-webkit-tap-highlight-color:rg ...
- iniutils for Golang
一直有计划将 Delphi 中的譬如 TIniFile 等相关功能移植到 Golang,这些设施在 Delphi 中(相对而言)比较常用,使用起来也非常方便. 虽然 Github 上早已有这些三方库, ...
- Spark HA实战
Spark HA需要安装zookeeper,推荐稳定版3.4.6. 1.下载zookeeper3.4.6,2.配置环境变量3.创建data logs4.vi conf/zoo.cfg5 data目录中 ...