js调用Flex中的方法并向flex中传参及flex调用js示例

首先,有了一个swf文件,test.swf,同时也有一个自动生成的html文件,test.html。
然后,在另外一个文件,test.jsp中,通过iframe,引入了test.html,即引入了swf。

现在想要在test.jsp中,向flex传参,并调用flex中的方法,我采用的方法是:
首先,在jsp中写一个调用flex的方法,如下

复制代码 代码如下:

function initSWF(){
//得到swf的object
var obj = window.frames["rightframe"].ReverseQuery; //rightframe是iframe的名字,ReverseQuery是在test.html中,引入swf做object的id。
//调用它的方法
var start = "<%=startPoint%>";
var end = "<%=endPoint%>";
obj.showParams(start,end);
}
在html中,有方法
/*在flex中只能调用本页面的js方法*/
function initSWF(){
parent.initSWF();
}
在flex,有如下方法:
public function showParams(start:String,end:String):void{
Alert.show(start);
Alert.show(end);
}

这时,需要建立一个打开他们之间通信的桥梁了,在flex的初始化时,要使用
ExternalInterface.addCallback("showParams",showParams); //前者是它暴露给js的方法名,后者是它在flex中的方法名。
这样,理论上就可以实现调用了。将initSWF方法放在页面的onload方法中即可实现。

但是产生一个问题,如果flex在页面中没有加载成功时,会报找不到对象的错误。因此,需要我们在确保swf文件加载完成后,再调用swf中的方法。
但监听它加载完成显然有点浪费感情,于是,我们采用的策略是,等它加载完,再调用js的initSWF方法,即可将环节全部打通。

因此,在flex的初始化时,加入
//调用载入页面的initSWF方法
ExternalInterface.call("initSWF"); //要将它放在注册对外方法之后进行。
大功告成。

有需要注意的地方:
在flex当中调用js的方法,这个方法只能写在引入swf的文件中,但我在jsp中引入了html,所以只能是在html中的js,是调用父页面的js方法。
而在jsp中对于swf文件的引用,要借助window.frames["rightframe"]

时间: 2024-10-18 04:46:30

js调用Flex中的方法并向flex中传参及flex调用js示例的相关文章

js调用Flex中的方法并向flex中传参及flex调用js示例_Flex

首先,有了一个swf文件,test.swf,同时也有一个自动生成的html文件,test.html. 然后,在另外一个文件,test.jsp中,通过iframe,引入了test.html,即引入了swf. 现在想要在test.jsp中,向flex传参,并调用flex中的方法,我采用的方法是: 首先,在jsp中写一个调用flex的方法,如下 复制代码 代码如下: function initSWF(){ //得到swf的object var obj = window.frames["rightfra

php文件调用一个类或方法,生成一个log文件,log文件上输出调用的时间和内容,该怎么写

问题描述 php文件调用一个类或方法,生成一个log文件,log文件上输出调用的时间和内容,该怎么写 php文件调用一个类或方法,生成一个log文件,log文件上输出调用的时间和内容,该怎么写 解决方案 /** 自定义日志 @param string $type @param string $content @return bool */ function mylog($type="",$content=""){ if(!$content || !$type){ r

服务器-利用httpclient传参的方式调用webservice

问题描述 利用httpclient传参的方式调用webservice 其中webservice是两个短信平台(科尚和testin)的整合,在调用科尚时能够正常使用,可是调用testin的时候显示服务器内部出错. 解决方案 很明显是对方服务器异常 解决方案二: 需要查看服务器的具体日志,定界是客户端传参问题还是服务端逻辑问题.

js中window.showModalDialog各浏览器居中和传参实例兼以及一些兼容性问题

  浏览器居中以及传参实例 window.showModelDialog可设置center参数为yes,保证其在子窗口在父窗口居中. 但是该参数只对IE浏览器有效,对火狐无效,只有通过计算模态窗口的居中位置.   解决办法 function openShowModalDialog(url,param,whparam,e){    // 传递至子窗口的参数  var paramObj = param || { };    // 模态窗口高度和宽度  var whparamObj = whparam

Node.js开发教程之基于OnceIO框架实现文件上传和验证功能_node.js

OnceIO 是 OnceDoc 企业内容(网盘)的底层Web框架,它可以实现模板文件.静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只在第一次压缩),拥有非常好的性能,为您节约服务器成本.它的模块化功能,可以让你的Web进行分布式存储,即一个扩展包里即包含前端.后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展.这里是介绍如何使用OnceIO的一系列文章. 在这一章节中,我们将为大家演示如何使用 OnceIO 实现文件

javascript-Android 在webview中js怎么调用java里面的方法

问题描述 Android 在webview中js怎么调用java里面的方法 Android 在webview中js怎么调用java里面的方法 需要调用的是一个社会化分享的 解决方案 http://zhidao.baidu.com/link?url=8GQWxP5vy1Idkk3cVnU9YZpCHb4X5n37A9aeSdD3FaoPWIfXQzQ82D6nDpSJ6KBkfuqZsZ398EEcpXuIchcGiehjvrn1KqoWfVAAgNuWh2e 参考., 解决方案二: 1.布局文件

怎么实现javascript中调用java类中的方法

问题描述 body中部分代码如:<center><font size="4" color="red">吊灯</font> <input type="button" id="diaodeng" value=<%=state[0]%> onclick="dianji1()"><br><br><br><br>

使用jqgrid调用aspx.cs中的方法

问题描述 使用jqgrid调用aspx.cs中的方法 本人第一次使用jqgrid.现在使用jqgrid调用aspx.cs中的方法,发现根本没有执行后台的断点.后台方法已经声明为static而且也增加了webmethod.然后又尝试了调用ashx,可以显示成功.又试了使用jquery ajax调用后台方法生成xml,再将xml方法绑定到jqgrid这种方法也能成功.求高手指教,有什么需要注意的吗. 解决方案 web.config配置了ws允许get/post请求没有 你没有添加contenttyp

iOS重写父类中的方法时要先调用父类中的方法的原因

现有两个类: 1.Object001继承自NSObject #import <Foundation/Foundation.h>   @interface Object001 : NSObject   //Object001的头文件,我只是在这里面声明了个方法 -(void)printfString;   @end   #import "Object001.h"   @implementation Object001   //Object001的实现文件,我实现了声明的pri