随着各单位部门信息化进程的不断发展,互通互联、共享协调不断的被越来越多的客户所重视。很多新项目都要去必须能够集成已有的早期系统,至少也要能够实现交互对接。今天跟大家分享的是系统对接中ActionScript与JavaScript实现交互的两种方式,希望能够给大家的工作和学习带来一点帮助。

  A.ExternalInterface

  Flex提供的ExternalInterface 类包含了两个静态属性和两个静态方法。这些属性和方法可用于获取有关外部接口连接的信息,从 ActionScript 执行容器中的代码,以及使 ActionScript 函数可供容器调用。

  ExternalInterface.available 属性指示当前的 Flash Player 是否位于提供外部接口的容器中。如果外部接口可用,则此属性为 true;否则,为 false。在使用 ExternalInterface 类中的任何其他功能之前,应始终进行检查以确保当前容器支持外部接口通信,如下所示:

  if (ExternalInterface.available)  {      // Perform ExternalInterface method calls here.  }

  假设,现在需要将Flex开发完成的GIS模块与现有的ASPX或者JSP等网站系统进行集成的话。相信大家一定会想到 swfobject。对的通过 swfobject可以将编译好的Flex应用程序嵌入到已有系统的相应页面中来。

  方法如下:

   swfobject.embedSWF("ArcGIS/Flex/gis.swf", "map_canvas", "100%", "100%", "9.0.0", "flashplayer/expressInstall.swf", flashvars);

  主要参数第一是内嵌的编译后程序(gis.swf)、内嵌位置(id为map_canvas的div)、容器尺寸参数、FlashPlayer的版本、缺失的提示、传入参数等。

  下面我们来说说,内嵌后系统的交互问题。首先,如果已有的业务系统需要传递参数调用GIS模块的方法,如何操作呢?ExternalInterface的addCallback方法可以实现外部容器对Flex内部方法的访问。需要做的就是要在Flex中将相应的方法进行注册即可。操作如下:

   ExternalInterface.addCallback("flexFun",doFunfromJS);

  如上注册后,在业务系统就可以来使用注册的函数名flexFun进行交互了,操作方法如下:

   function getCoordinate(qyId) {
if (qyId != "-1") {
document.getElementById('map_canvas').flexFun("1",qyId);
} else {
alert("未查找到该企业坐标");
} }

  值得注意的是这种方式需要等待编译好的swf在容器中加载完成后才能调用相应的方法,否则会提示错误,可以通过添加判断来避免。

  另外ExternalInterface还提供一个方法call可以用来调用容器之外的方法,如调用javaScript的方法。操作方式比较简单:

  ExternalInterface.call("jsfun",resultAS.toString());

  其中,jsfun为javaScript中的函数名,resultAS为传入参数。

  function jsfun(result){

				var rs = document.getElementById("result");
rs.value = "查询结果:" + '\n' + result;
}

  通过这种方式就可将GIS模块中的Flex查询结果返回给的业务系统。

  B.FlexGlobals

  另外FlexGlobals类也可以实现简单单向参数传递。FlexGlobals.topLevelApplication.parameters可以获取业务系统的相应参数来进行相应的初始化或者进一步的工作。

  业务系统参数传递,操作如下:

  <script type="text/javascript">
var flashvars = {};
flashvars.QY_id = <% =Request["ID"] %>;
swfobject.embedSWF("ArcGIS/Flex/update.swf", "map_canvas", "100%", "100%", "9.0.0", "flashplayer/expressInstall.swf",flashvars);
</script>

  如上就可以将业务系统中的企业id传递给Flex的GIS模块进行初始化,Flex代码如下:

  var jsParams:Object=FlexGlobals.topLevelApplication.parameters;
qy_id=jsParams["QY_id"];
var where:String="QY_id ="+qy_id;
queryOnResult(where);

  总结:实现ActionScript与JavaScript交互的方式可能会有好多种,但是以上两个是我在近期与客户系统对接中使用到的两种,感觉比较简单易用,在此总结分享也是希望大家在进行相应的工作中可以参考。

Flex(ActionScript)与JavaScript交互的两种方式示例的更多相关文章

  1. Android中H5和Native交互的两种方式

    Android中H5和Native交互的两种方式:http://www.jianshu.com/p/bcb5d8582d92 注意事项: 1.android给h5页面注入一个对象(WZApp),这个对 ...

  2. 总结javascript继承的两种方式的N中写法

    最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式. 一.prototype方式 当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个p ...

  3. javascript 继承的两种方式

    js中继承可以分为两种:对象冒充和原型链方式 一.对象冒充包括三种:临时属性方式.call()及apply()方式1.临时属性方式 代码如下: function Person(name){     t ...

  4. [Flex] IFrame系列 —— 嵌入本地页面两种方式source和content(html页面和html代码)

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  5. js-使用JavaScript、jQuery两种方式实现全选/全不选

    html代码 <input type='checkbox' value="10" name="frust"/>苹果10元 <br/> & ...

  6. 模块化Javascript代码的两种方式

    1.将模块整体放在函数里 function buildMonthNameModule() { var names = ["January ", "February&quo ...

  7. Nginx和php交互的两种方式

    Unix socket 也叫IPC socket  也就是进程间通信套接字用于同一台主机上的不同进程间交换数据 TCP socket IP socket要利用主机的传输层(tcp),可以用于同一台主机 ...

  8. JavaScript输出的两种方式

    var a="Hello World" document.write(a) //在网页上输出:Hello World var a="Hello World" c ...

  9. php对数组遍历的两种方式示例

    在对 php 数组遍历时,一般经常使用 foreach 来遍历,很少用 while 来遍历,在下面的代码中作一个对比. <?php $content = ["ID" => ...

随机推荐

  1. java的OSGi确实是个坑

    sun已经把java的OSGi这个坑填得够深了,sun估计短时间想把这个坑调回来是不可能了,跟.net比包管理模块化开发确实java够烂的. java的模块化架构开发只能让OSGi回去睡觉,自定义模块 ...

  2. py3.0第四天 函数

    列表生成 # -*- coding: utf-8 -*- # data =[1,2,3] # for index,i in enumerate(data): # print (index,i) # d ...

  3. Codeforces Round #539 (Div. 2) C Sasha and a Bit of Relax

    题中意思显而易见,即求满足al⊕al+1⊕…⊕amid=amid+1⊕amid+2⊕…⊕ar且l到r的区间长为偶数的这样的数对(l,r)的个数. 若al⊕al+1⊕…⊕amid=amid+1⊕amid ...

  4. 使用kbmmw 生成REST 服务OpenAPI函数原型

    我们以前介绍了很多kbmmw 开发REST 的例子.一直有个问题困惑着大家. 我们提供REST 服务,如何让客户端快速的使用,当然可以写文档,但是一旦 后台改变了,又要再一次给调用者发新文档,非常的麻 ...

  5. Code First的实体继承模式

    Entity Framework的Code First模式有三种实体继承模式 1.Table per Type (TPT)继承 2.Table per Class Hierarchy(TPH)继承 3 ...

  6. PHP安装+使用

        curl -s http://php-osx.liip.ch/install.sh | bash -s 5.4       ...... Extracting usr/local/php5-5 ...

  7. Java项目下的classpath路径包括哪里

    https://my.oschina.net/zjllovecode/blog/916927 classpath指的是.classpath下kind="src" 的路径

  8. IDEA的相关使用-----快捷键

    转:https://blog.csdn.net/qq_35091777/article/details/80988165 IntelliJ Idea 常用快捷键列表 Alt+回车 导入包,自动修正Ct ...

  9. VS2015配置OpenCV,使用mfc摄像头程序测试

    转自:https://blog.csdn.net/Lee_Dk/article/details/80466523 这只是介绍了如何加入OpenCV,怎么查找OpenCV请看出处. 新建一个项目.找到属 ...

  10. 解决ORA-30036:无法按8扩展段(在还原表空间‘XXXX’中)

    在update一数据量很大的表时,提示“ORA-30036:无法按8扩展段” 度娘了下原因与解决办法:   1.查询了一下undo表空间的使用,发现已经超过了80% SELECT a.tablespa ...