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(网络地址转 ...
随机推荐
- 浅谈Scrapy爬虫(一)
以下谈论的 scrapy 基于 0.20.2 版本(当前最新版本是 0.22.0 ),python 2.7.6. 开发环境是windows 7 sp1. 互联网上比较有价值的参考资料 1. Scr ...
- CentOS 7 配置静态 ip
1. 需求场景: 在 CentOS7 上部署了一个 svn ,由于centOS7 默认是 dhcp 的,所以每过一段时间 ip 就会有变化,而 svn 要求 ip 是不能变的,不然没法同步. 网上找了 ...
- Android ProgressBar分析及自定义ProgressBar
ProgressBar是在执行耗时操作时的一种人性化设计.分为两种形式:转圈的,能显示进度的. 而能取决于是什么样式的PregressBar,当然就是PregressBar的样式啦~ Widget.P ...
- 自定义一个可复用的BaseAdapter
1.我们一点点开始改: 首先我们自定义BaseAdapter,等下我们就要对他进行升级改造 /** * Created by Jay on 2015/9/21 0021. */ public clas ...
- shell crontab执行结果不同问题处理
shell脚本手工执行结果正确,但是放到crontab中执行,结果却是错误的. 脚本执行的路径肯定是没有问题的,比较怀疑crontab执行和手工执行两者的环境不同,在手工执行脚本时,通过ssh登录到服 ...
- Xcode5中如何切换Storyboards为xib
在Xcode5中,当创建一个带View的iPhone项目时,默认必须使用Storyboards,不再支持切换xib的checkbox.本文讲解如何手动切换到使用xib来布局. 1,把Main.stor ...
- HHVM和Hack
1. HHVM(http://hhvm.com) 全称是Hip Hop Virtual Machine,是一个PHP引擎. 2.Hack(http://hacklang.org) 一门新的服务器端语 ...
- windows server 2012 r2 远程桌面连接指南
具体详情请阅览文档 http://pan.baidu.com/s/1jHTCpW6 windows server 2012 r2 远程桌面连接指南 - 作者 rick·bao - 日期 2016-0 ...
- java编程者必收藏的十大学习网站-xiaolanglang123 -
3S博客 http://blog.3snews.net/space.php?uid=13924628&do=blog&id=70282
- GOLANG SDK下载
如果没有FQ的话是不能访问国外网站的,但是golang提供了中国站点,要下载sdk可以在中国站点下载 中国站点: http://www.golangtc.com/download