Flex以前采用 flash.system.fscommand 与其他web container 或者 ActiveX container进行通信,但是fscommand有一些弊端,比如说//未完待续不能及时返回数据等等,而且已经过时很久了。
还是说说ExternalInterface吧,这个接口类可以让Flex程序被其他的web或者common application container调用,入JavaScript, VB, VC++程序等等,当然相反地,它也让Flex能够去调用对方的函数,并且都能够获取返回值。
直接看例子吧:
首先是Flex调用web或者application container的函数,
1. Flex调用Javascript函数,并且获取返回值:
//Flex中定义调用Javascript的方法
public function showInfoWithJavaScript() : void
{
Security.allowDomain("*"); //定义访问安全,其中参数可以是‘*’,也是可以一些domain,例如www.xxx.com,IP地址等
if (ExternalInterface.avaliable) //检测flash player是否在一个容器里面,并且提供被外部调用的借口,即Flex调用Javascript的有效性
{
var arr : Array = ExternalInterface.call("showInfo", info) // 调用Javascript的showInfo方法,并且传递参数info,这个参数可以是常量,也可以是变量,String或者是Object,然后获取Javascript返回的数据
}
else
{
Alert.show("调用外部的Javascript失败","警告");
}
}
//以下是html中加入定义了showInfo方法的javascript
/html-template/index.template.html
<head>
...
<script language="JavaScript" src="externalInterface.js"></script>
</head>
//以下是定义的externalInterface.js
<script language="javascript">
var arr : array = ['1','2','3'];
function showInfo(param) {
if (param == null)
return null;
else
return arr; //返回数据给Flex
}
</script>
2. Javascript调用Flex的函数,并且获取返回值
//Flex中定义被Javascript调用的函数
private var arr : Array = ['1','2','3'];
public function init() : void
{
if (ExternalInterface.avaliable)
{
ExternalInterface.addCallBack("callFlex", beingCalled);
}
}
public function beingCalled(param : Object) : void
{
if (param == null)
return null;
else
return arr; //返回给Javascript数据
}
//Javascript中调用Flex地方法
<script language="JavaScript">
// 其中flashObject可以通过Object的embed引入;
var callResult = flashObject.myFunction("my name");
</script>
...
<object id="flashObject"...>
...
<embed name="flashObject".../>
</object>
3. Flex调用VC++本地程序,并且获取返回值
//Flex中定义调用VC++的方法
public function callCPPlus() : void
{
if (ExternalInterface.avaliable) //检测flash player是否在一个容器里面,并且提供被外部调用的借口,即Flex调用VC++的有效性
{
var str : String = ExternalInterface.call("returnToFlex", info) // 调用CV++的showInfo方法,并且传递参数info,这个参数可以是常量,也可以是变量,String或者是Object,然后获取VC++返回的数据,这个返回的数据是XML格式的数据,其格式在后面给出;其中这个call方法让flash player触发一个Flash Call事件来调用VC++方法,其中参数也会被格式化为xml格式的数据;也即他们之间的通信是通过XML格式的数据;
}
else
{
Alert.show("调用外部的VC++方法失败","警告");
}
}
//VC++中定以被Flex调用的方法
//a. 首先需要在VC++中嵌入flash player插件,定义其对象为m_FlashPlayer
//b. VC++通过事件对象的request来获取Flex过来的数据
//c. 通过m_FlashPlayer的SetReturnValue方法返回xml格式的数据给Flex
void CMyBicapDlg::OnFlashCallShockwaveflash1(LPCTSTR request)
{
// TODO: Add your control notification handler code here
// "<invoke name='%s' returntype='xml'><arguments><string>%s</string></arguments></invoke>"
// parse request
TiXmlDocument request_xml;
request_xml.Parse(request);
const char* request_name = request_xml.RootElement()->Attribute("name");
if (strcmp(request_name,"savedVideosDirectory") == 0 || strcmp(request_name,"bufferDirectory") == 0 || strcmp(request_name,"preferredExportDirectory") == 0)
{
// choose path
CoInitialize(NULL);
BROWSEINFO bi;
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = NULL;
bi.lpszTitle = NULL;
bi.ulFlags = BIF_BROWSEFORCOMPUTER|BIF_RETURNONLYFSDIRS|BIF_STATUSTEXT;
bi.lpfn = NULL;
LPCITEMIDLIST pidl = SHBrowseForFolder(&bi);
if(pidl != NULL)
{
TCHAR tpath[MAX_PATH] = _T("");
BOOL bresult = SHGetPathFromIDList(pidl, tpath);
if (bresult)
{
std::string re_value = "<string>";
re_value = re_value+tpath+"</string>";
m_FlashPlayer.SetReturnValue(re_value.c_str());
}
}
CoUninitialize();
}
}
4. VC++调用Flex定义的函数
//Flex端定义被VC++调用的方法,
private function initApp() : void
{
Security.allowDomain("*");
if (ExternalInterface.available)
{
ExternalInterface.addCallback("sendToActionScript", receivedFromCPPlus);
}
}
public function receivedFromCPPlus(value : String) : String
{
Alert.show("C++传入参数->" + value, "提示"); //receive from C++ to Flex
return channelList.selectedItem.ChannelNum; //return value from Flex to C++
}
//VC++定义的调用Flex方法
//m_flashPlayer同样如上面所定义的那样,是flash player插件的对象
CString ret = m_FlashPlayer.CallFunction("<invoke name=\"sendToActionScript\" returntype=\"xml \"><arguments><string>aaa</string></arguments></invoke>");
分享到:
相关推荐
5. **实际应用**:Flex与JavaScript的交互广泛应用于网页中的数据交换、用户交互、页面导航等场景。例如,Flex可以用于复杂的计算或图形渲染,而JavaScript则负责处理DOM操作和页面逻辑。 在提供的示例"flexWithJS...
Flex与.NET交互是一种常见的跨平台应用开发场景,它允许基于Adobe Flex的前端应用程序与Microsoft .NET框架后端服务进行通信。这种交互使得开发者能够利用Flex的富互联网应用(RIA)特性与.NET的强大后端功能相结合...
### Flex与JavaScript交互详解 #### 一、引言 随着Web技术的发展,不同语言之间的通信变得尤为重要。在Flex与HTML的结合中,Flex通常作为富客户端应用,而JavaScript则负责处理网页逻辑。为了实现二者之间的无缝...
### Flex与Java交互知识点 #### 一、简介 在Flex与Java进行交互的过程中,主要涉及到的是前后端的数据传输。本文将详细介绍如何通过Flex与Java进行数据交换,包括Flex客户端的实现方式、Java后端的数据处理逻辑,...
Flex与JavaScript交互是Web开发中的一个重要技术,它允许在Adobe Flash Player或Adobe AIR环境中运行的Flex应用程序与HTML页面中的JavaScript代码进行通信。这种交互性极大地扩展了富互联网应用(RIA)的功能,使得...
通过使用BlazeDS,可以有效地实现在Flex与Java之间的数据通信,从而构建出功能强大且交互丰富的Web应用程序。本文详细介绍了如何搭建开发环境并使用BlazeDS实现Flex与Java之间的通信,希望能够帮助开发者更好地理解...
Flex与Java的交互是跨平台应用开发中的常见技术组合,允许前端用户界面(UI)与后端业务逻辑进行高效沟通。在本文中,我们将深入探讨如何使用Flex 4与Java进行通信,并通过三种不同的方法实现这一目标:RemoteObject...
本文将详细介绍如何使用Flex与Ajax进行交互以及如何实现Flex与JavaScript之间的通信。 #### 二、Flex-AjaxBridge技术概述 Flex-AjaxBridge技术是一种用于在Flex应用和基于JavaScript的Ajax应用之间进行通信的技术...
### Flex与Java交互详解 #### 一、引言 随着技术的发展,前端开发与后端服务之间的交互变得越来越重要。Flex作为一种流行的富互联网应用程序(RIA)框架,与Java结合使用时能够实现强大的功能。本文将详细介绍如何...
Flex与Java交互是Web开发中的常见技术,尤其在构建富客户端应用时,它允许前端的Flex界面与后端的Java服务器进行数据交换和业务逻辑处理。Flex作为一个强大的RIA(Rich Internet Applications)开发框架,提供了丰富...
标题“flex与js交互 关于ExternalInterface使用的小例子”指出了本文将探讨如何使用Flex的ExternalInterface类与JavaScript进行通信。ExternalInterface是Flex提供的一个API,允许ActionScript(Flex的主要编程语言...
标题"flex 和 java交互"指出了一个关键的技术融合,即Flex与Java的整合,允许Flex前端与Java后端进行数据和功能的通信。这种交互通常是通过AMF(Action Message Format)协议实现的,它提供了一种高效的数据序列化...
在Flex中,我们可以使用`ExternalInterface`类来与JavaScript进行交互。`ExternalInterface.addCallback`方法允许我们在JavaScript中调用Flex组件的方法,而`ExternalInterface.call`方法则用于在Flex中调用...
本篇文章将深入探讨Flex与Flash之间的交互,以及如何实现它们之间的相互调用。 Flex是一种基于MXML和ActionScript的开源框架,主要用于构建用户界面。它提供了一个强大的组件库,可以快速地创建复杂的、数据驱动的...
在Flex应用中,与后台交互通常涉及到网络通信,主要通过HTTPService、WebService或AMFChannel等组件来完成。HTTPService允许开发者发送HTTP请求到服务器,获取或提交数据;WebService则用于调用符合SOAP协议的Web...
Flex与Servlet之间的数据交互是JavaWeb开发中的一个重要环节,它涉及到客户端富互联网应用程序(RIA)与服务器端数据处理的协同工作。Flex作为一个基于Adobe Flash Player的前端开发框架,主要用于创建具有丰富用户...
Flex和Java交互搭建是开发富互联网应用程序(RIA)时常用的一种技术组合,它允许前端的Flex界面与后端的Java服务器进行数据交换和业务逻辑处理。这个项目新手用来练手非常合适,因为其结构简单,易于理解。接下来,...
标题中的"C#与Flex交互"指的是在开发过程中,使用C#作为后端处理逻辑,而Flex作为前端用户界面,两者之间进行数据和功能的通信。Flex是一种基于Adobe AIR和Flash Player运行时的开源框架,主要用于构建富互联网应用...
Flex与Java交互通讯是Web开发中的一个重要话题,它涉及到客户端与服务器端的高效协同工作。Flex,作为Adobe的开源框架,主要用于构建富互联网应用程序(RIA),而Java则是一种广泛使用的后端开发语言,能提供强大的...
Flex和Java之间的通信是Web应用程序开发中的一个重要环节,它允许前端用户界面(UI)与后端服务器进行数据交互。Flex是一种基于Adobe Flash Player或Adobe AIR运行时的富互联网应用程序(RIA)开发框架,而Java则是...