- 浏览: 30656 次
最新评论
as与js相互通信(flex中调用js函数)
- 博客分类:
- 技术杂绘
Flex中As调用Js的方法是:
1、导入包 (import flash.external.ExternalInterface;)
2、使用ExternalInterface.call("Js函数名称",参数)进行调用,其返回的值就是Js函数所返回的值
Js调用As的方法是:
1、导入包 (import flash.external.ExternalInterface;)
2、在initApp中使用ExternalInterface.addCallback("用于Js调用的函数名",As中的函数名)进行注册下
3、js中 就可以用document.getElementById("Flas在Html中的ID").注册时设置的函数名(参数)进行调用
as和js通信addcallback失效
参考原文:http://www.zhaohongri.cn/?p=14
情况一:flash一旦在浏览器里cache住,如果在as里一开始就addcallback就会失效
情况二:一个js函数上来就调用as的一个函数的时候,页面会报错,提示找不到这个flash对象,或者函数没有定义。Flash8的时代,针对 ExternalInterface这个类,文档里只说明了怎么用,而没有具体说怎么合理的组织和页面的结构,一直到了cs3的时代,帮助里才说明了正确的函数注册和js调用的过程,具体的见Flash cs3帮助。大概的代码如下:
js部分:
var jsReady=false;
var swfReady=false;
function isReady(){
return jsReady;
}
function setSwfIsReady(){
swfReady=true;
getSWF("flashobj").fun()
}
function pageInit(){
jsReady=true;
}
function getSWF(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName+"_ob"];
} else {
return document[movieName+"_em"];
}
}
onload=function(){
pageInit();
}
注意,在getSWF函数里用了 return window[movieName+"_ob"]和return document[movieName+"_em"],在IE下,如果object标签和embed表现用同样的id,通过js去访问flash对象的时候,IE会认不出,FF是没有问题的
as部分
private function registerJsFun():void{
if(ExternalInterface.available){
try{
var containerReady:Boolean=isContainerReady();
//ExternalInterface.call("ceshi","registerJsFun:"+ containerReady);
if(containerReady){
//注册函数
setupCallBacks();
}else{
//检测是否准备好
var readyTimer:Timer=new Timer(100);
readyTimer.addEventListener(TimerEvent.TIMER,timeH andler);
readyTimer.start();
}
}catch(error:Error){
trace(error)
}
}else{
trace("External interface is not available for this container.");
}
}
private function timeHandler(event:TimerEvent):void{
var isReady:Boolean=isContainerReady();
if(isReady){
Timer(event.target).stop();
setupCallBacks();
}
}
private function isContainerReady():Boolean{
var result:Boolean=Boolean(ExternalInterface.call("isR eady"));
return result;
}
private function setupCallBacks():void{
ExternalInterface.addCallback("fun",fun);
ExternalInterface.call("setSwfIsReady");
}
具体我就不解释了,不明白的可以仔细去看下cs3帮助,大概的意思就是页面开始渲染的时候js去调用swf对象,有可能swf对象没有完全 load完,所以这个触发器要从flash开始,当flash加载的时候就开始不停的调用页面的一个函数,取一个页面是否加载完毕的标识,当 pageonLoad后,这个标识为true了,说明flash也加载完毕了,这个时候flash再开始注册函数,同时调用页面的js,让js调用 Flash对象
实例:a.mxml
index.html
function callApp() {
var x = MyFlexApp.flexFunctionAlias();
document.getElementById('receivedField').value = x;
}
function changeDocumentTitle(a) {
window.document.title=a;
return document.getElementById('sendField').value;
}
style='overflow-x:hidden;overflow-y:hidden'>
数据发送给AS:
接收AS的数据:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hartkevin/archive/2010/03/10/ 5361524.aspx
发表评论
-
java字符串比较大小
2012-07-06 09:51 770public int compareTo(String a ... -
UltraEdit 正则表达式替换
2012-07-06 09:44 1329UE用于直观简便地处理文本很是强大,用的较多的有列模式以及 ... -
js 正则表达式乱
2012-07-06 09:37 848js正则表达式详解 j ... -
超级面板皮肤及其使用
2012-07-06 09:29 642画出类似于遨游那样的最大化,最小化,关闭,还原按钮的皮肤。 ... -
给自己的网站添加 分享到 新浪微博等各微博和网站功能
2012-07-05 20:44 722把下面的代码插入到你想放置的位置就可以 将此影视分享到: ... -
Flex 遍历组件的实现
2012-07-03 13:42 882Flex有两个阵营组件:spark组件和mx组件,关于sp ... -
Flex 遍历组件的实现
2012-07-03 12:16 710Flex有两个阵营组件:spark组件和mx组件,关于sp ... -
分页组件(引用Super Flex文章)
2012-07-02 10:10 762这套组件 主要是用到了LinkButton和Repeate ... -
修改flex chart中Legend的字体样式
2012-07-02 10:10 734最近在弄FLEX的图表, 发现CHART 中的Legend ... -
实现flex中实现图片平铺
2012-07-02 10:10 933在网页中实现一个图片平铺功能比较简单,只需要设置css样式 ... -
Flex ant out of memory error.
2012-07-02 09:41 616... -
Flex的通信方式(三)――HTTPService_1
2012-07-01 09:29 972MXML代码: HTTPService id=& ... -
Flex HTTPService 跨域访问
2012-07-01 09:29 555Summary: 基于Web 的flex 程序,后台采用的 ... -
Flex中使用HttpService和WebService方式通信
2012-07-01 09:29 729HttpService、WebService、Remote ... -
使用FLEX的HttpService与ASP.NET进行动态交互之一(转载)
2012-07-01 09:29 537使用FLEX的HttpService ... -
Flex的通信方式(五)――HTTPService_3
2012-07-01 09:29 583public function getuserproc() ... -
RSL编译方式的FLEX站点出现#2046错误
2012-06-30 11:14 455RSL编译方式的FLEX站点出 ... -
什么是Flex?Flex与Flash的区别
2012-06-30 11:14 736什么是Flex?Flex与Flash的区别 2011年07月 ... -
Flex学习终于开工了
2012-06-30 11:14 462Flex学习终于开工了 2011年10月27日 今天是我 ... -
Java开发者如何测验Flex
2012-06-30 11:14 614Java开发者如何测验Flex ...
相关推荐
flex—JS相互调用flex—JS相互调用flex—JS相互调用
flex 与JS间的相互调用和参数传递,简单可运行实例
as与js方法的相互调用
js调用flex的ActionScript函数方法例子
flex 与 Js 通信 相互调用;用于flex 与JS 中的 方法通信,其中的crossdomain.xml 属于安全策略问题
为flex入门人员写的关于如何使用felx调用js文件以及反调用的文章
Flex与Flash相互调用。解压后有两个工程目录,一个是flash程序,一个是flex工程。
arcgis server flex API 函数及调用实例 FLEX 地图实例
Flex 4.5 与js交互,连接ocx的小实例
本例,flash内嵌在flex里,示例了: 1、flash调用flex的函数(方法) 2、flex调用flash的函数(方法)
JS与Flex互转例子,能用,经过加工的~ 环境:Java+Flex项目中,Flex与JS互相调用、通信。
之前一版不知道怎么删除,只能再上传一版,flex 与JS间的相互调用和参数传递,简单可运行实例
Flex与activex本身是无法相互直接通信的,但是可以有JS作为中间桥梁来作为中介已达到通信的目的
Flex与Java实现通信,Flex与Java实现通信,Flex与Java实现通信
NULL 博文链接:https://jinqikai.iteye.com/blog/1048450
Js与Flex互通信 Aspx页面通过JS动态态传参数给Flex, Js回调Flex方法
这是一个flex调用C代码输出hello world的简单例子,包括同步返回模式和异步事件返回两种模式。
NULL 博文链接:https://lipbb.iteye.com/blog/1843858
一个完整的flex与js的工程源码,还通过flex调用js在线打开office文档,我也是由于项目的需要,才研究的
flex与java通信