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(网络地址转 ...
随机推荐
- Linq对XML的简单操作
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
- jeesz源码下载
大型分布式企业架构 jeesz,百度去搜索jeesz
- linux中oops信息的调试及栈回溯【转】
本文转载自:http://blog.csdn.net/kangear/article/details/8217329 ========================================= ...
- UITableViewCell内放置复杂结构的subview,但subview中的Button不响应点击事件
原因可能是subview的frame没设置或者不对,这种情况下subview的内容依然正常显示,但是无法接收点击响应的消息. 具体来说就是缺少了下面这句代码: // subview - (id)ini ...
- 用eclipse打开已经编译的工程
第一种方法: eciplise------>File------>Import------>General------>Existing Project into Worksp ...
- UIScrollView,UIPageControl,UIImageView 实现图片轮播的效果
上一篇博客介绍了如何将XCode创立的项目提交到Git版本控制,这次就直接做一个图片轮播的展示demo,刚好可以把UIScrollView.UIPageControl.UIImageView这三个控件 ...
- (转)深入浅出 妙用Javascript中apply、call、bind
原文连接 深入浅出 妙用Javascript中apply.call.bind 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且 ...
- 在Excel中制作金字塔条形图
使用场景:一项市场调查研究中,男性和女性.赞同和反对.满意和不满意的两方面的消费者,他们在某些项目上的指标分布特性一项产品组合决策中,乐观场景和悲观场景下各产品的获利情况一个产品试销活动中,不同门店渠 ...
- 双十一 VS 火车票(12306)
火车票开售了,又是一年,code了一年,咱们也该回顾回顾了. 还记得12306上线之初各种技术大牛给人家出方案,吐槽人家外包费用?我们来回顾回顾. 就园子里都过千篇文章来侃这事儿,请问有多少主题的文章 ...
- 微信小程序-地图组件
map 地图. 标记点 标记点用于在地图上显示标记的位置,不能自定义图标和样式 覆盖物 覆盖物用于在地图上显示自定义图标,可自定义图标和样式 地图组件的经纬度必填, 如果不填经纬度则默认值是北京的经纬 ...