- 浏览: 308192 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
z390174504:
恩,确实,我也遇到了,好像是库冲突了,我在一个库项目中,单独引 ...
VerifyError: Error #1053: Illegal override of… -
cl1154781231:
您好,为什么使用tk-filter不用过滤*.gzip???我 ...
ExtJS使用gzip压缩 -
YY008871:
仅限ie下登录成功或失败吗?
单点登录—基于cookie的简单实现(IE) -
蛋的懒蛋:
不好用啊,IE7是运行了,但是就是一启动就报错了,接着就关了 ...
IE7绿色版下载-转载 -
fireinwind:
harman001 写道 ,为什么我的id大写同样没事啊!- ...
Spring配置文件中id的第二个字母不能大写问题
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部分:
<script>
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();
}
</script>
注意,在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,timeHandler);
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(”isReady”));
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
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import flash.external.*;
public function asFunc():String {
return sending_ti.text;
}
public function initApp():void {
//AddCallback方法允许javascript调用flash时间上函数
ExternalInterface.addCallback("flexFunctionAlias", asFunc);
}
public function callWrapper():void {
var f:String = "changeDocumentTitle";
//ExternalInterface.call(functionName:String,Parameters)可以调用javascript函数
//参数1: functionName – 你想要调用的javascript函数名要以字符串的形式
//参数2: Parameters – 需要传递给javascript函数的参数,用逗号分开,是可选的。
var getJSValue:String = ExternalInterface.call(f,"New Title");
received_ti.text = getJSValue;
}
]]>
</mx:Script>
<mx:Button id="send_button" x="368" y="100" click="initApp();" label="发送" fontSize="12" width="62"/>
<mx:TextInput id="received_ti" x="148" y="62" width="203" fontSize="12"/>
<mx:TextInput id="sending_ti" x="148" y="100" width="203" fontSize="12"/>
<mx:Label x="105" y="65" text="收到" fontSize="12"/>
<mx:Label x="105" y="103" text="发送" fontSize="12"/>
<mx:Button x="368" y="64" click="callWrapper();" label="接收" fontSize="12" width="62"/>
</mx:Application>
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//Dtd nowrap HTML 4.01 Transitional//EN">
<html>
<head>
<base target="_self">
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<script language="JavaScript">
function callApp() {
var x = MyFlexApp.flexFunctionAlias();
document.getElementById('receivedField').value = x;
}
function changeDocumentTitle(a) {
window.document.title=a;
return document.getElementById('sendField').value;
}
</script>
<body style='overflow-x:hidden;overflow-y:hidden'>
<form name="htmlForm">
数据发送给AS:
<input type="text" id="sendField" />
<input type="button" value="发送" onclick="" /><br />
<br />
接收AS的数据:
<input type="text" id="receivedField">
<input type="button" value="接收" onclick="callApp();" /><br />
</form>
<OBJECT id="MyFlexApp" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="100%" HEIGHT="500">
<PARAM NAME=movie VALUE="joinJS.swf">
<PARAM NAME=quality VALUE=high>
<PARAM NAME=scale VALUE=noborder>
<PARAM NAME=bgcolor VALUE=#000000>
<EMBED src="joinJS.swf" quality=high WIDTH="100%" HEIGHT="500" scale=noborder bgcolor=#000000 NAME="TH2"TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
</body>
track:http://www.blogjava.net/Alpha/archive/2009/06/27/284373.html
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部分:
<script>
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();
}
</script>
注意,在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,timeHandler);
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(”isReady”));
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
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import flash.external.*;
public function asFunc():String {
return sending_ti.text;
}
public function initApp():void {
//AddCallback方法允许javascript调用flash时间上函数
ExternalInterface.addCallback("flexFunctionAlias", asFunc);
}
public function callWrapper():void {
var f:String = "changeDocumentTitle";
//ExternalInterface.call(functionName:String,Parameters)可以调用javascript函数
//参数1: functionName – 你想要调用的javascript函数名要以字符串的形式
//参数2: Parameters – 需要传递给javascript函数的参数,用逗号分开,是可选的。
var getJSValue:String = ExternalInterface.call(f,"New Title");
received_ti.text = getJSValue;
}
]]>
</mx:Script>
<mx:Button id="send_button" x="368" y="100" click="initApp();" label="发送" fontSize="12" width="62"/>
<mx:TextInput id="received_ti" x="148" y="62" width="203" fontSize="12"/>
<mx:TextInput id="sending_ti" x="148" y="100" width="203" fontSize="12"/>
<mx:Label x="105" y="65" text="收到" fontSize="12"/>
<mx:Label x="105" y="103" text="发送" fontSize="12"/>
<mx:Button x="368" y="64" click="callWrapper();" label="接收" fontSize="12" width="62"/>
</mx:Application>
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//Dtd nowrap HTML 4.01 Transitional//EN">
<html>
<head>
<base target="_self">
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<script language="JavaScript">
function callApp() {
var x = MyFlexApp.flexFunctionAlias();
document.getElementById('receivedField').value = x;
}
function changeDocumentTitle(a) {
window.document.title=a;
return document.getElementById('sendField').value;
}
</script>
<body style='overflow-x:hidden;overflow-y:hidden'>
<form name="htmlForm">
数据发送给AS:
<input type="text" id="sendField" />
<input type="button" value="发送" onclick="" /><br />
<br />
接收AS的数据:
<input type="text" id="receivedField">
<input type="button" value="接收" onclick="callApp();" /><br />
</form>
<OBJECT id="MyFlexApp" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="100%" HEIGHT="500">
<PARAM NAME=movie VALUE="joinJS.swf">
<PARAM NAME=quality VALUE=high>
<PARAM NAME=scale VALUE=noborder>
<PARAM NAME=bgcolor VALUE=#000000>
<EMBED src="joinJS.swf" quality=high WIDTH="100%" HEIGHT="500" scale=noborder bgcolor=#000000 NAME="TH2"TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
</body>
track:http://www.blogjava.net/Alpha/archive/2009/06/27/284373.html
发表评论
-
MBean with the same name could not be unregisted
2011-11-28 20:29 1122应用服务器:WebSphere 场景: flex通过Bla ... -
as3中正则表达式符号说明与使用
2011-09-28 13:45 1738元字符:^ $ \ . * + ? ( ) [ ] { } | ... -
FLEX 屏闭系统右键菜单,及在列表控件DataGrid/Tree/List上点右键时自动选择当前行
2011-09-05 17:56 1380第一步:到http://rightclickmanager ... -
“SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者xxx不能访问xxx”解决方案一例
2011-06-27 14:01 2835SWF 文件不能被本地访 ... -
Flex中对swf文件的操作
2011-06-17 16:44 1580第一类: Flex中操作 fla格式或as格式文件生成的sw ... -
AS3应用程序模块化开发与ApplicationDomain
2011-06-17 11:52 1246当程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态 ... -
VerifyError: Error #1053: Illegal override of…
2011-06-16 10:53 2554I think some of you may encount ... -
VerifyError: Error #1053: Illegal override of removeChildBridge in mx.managers.S
2011-06-16 10:51 1519Ran into this error recently wh ... -
Flex builder的调试时需要flash player debug版本
2011-06-16 10:13 1727在adobe的网站上,有几种debug版本 http://w ... -
Flex Timer 定时器
2009-10-15 13:46 3449flash.util.Timer类 flash. ... -
flex: 使用setInterval 制作定时器
2009-10-15 13:44 1775setInterval 函数是Action Script 的全 ... -
Flex的DateChooser组件中文显示方法
2009-09-10 09:17 1354Flex中的DateChooser组件,默认情况下是英文的。如 ... -
Cairngorm 中 AS版本的 Service 中注意的问题
2009-09-09 17:41 1206注意!本文所说的cairgorm版本是2.2.1 Cairn ... -
Cairngorm中使用remoteObect方式
2009-09-09 17:40 11671. 在Control中有Command.as定义了Comma ... -
flex显示sprite
2009-08-25 16:06 45891.sprite类可以在AS工程中直接绘制在屏幕上.2.要加到 ... -
表格列数动态确定
2008-09-04 11:16 1012internal function onRetrieveT ... -
Flex与JavaScript的交互:调用JavaScipt或者被JavaScript调用
2008-09-04 10:32 1749一、在JavaScript中调用Fle ... -
Flex中的嵌入资源(Embedding Assets)
2008-09-01 11:52 6522Flex软件中经常需要使用一些外部的资源,如图片、声音、SWF ... -
PureMVC的十个小提示
2008-08-22 11:25 1525用(Pure)MVC的思想去思考 我应该如何开始使用(Pure ... -
flex与spring集成
2008-08-18 14:25 2608services-config.xml 定义spring fa ...
相关推荐
标题 "Flex与Javascript相互调用例子(附源码)" 指涉的是一个技术主题,主要探讨了如何在Adobe Flex应用程序中与JavaScript进行交互。Flex是基于ActionScript 3.0的开源框架,用于构建富互联网应用(RIA),而...
在跨平台应用开发中,经常会遇到ActionScript (AS)与JavaScript (JS)之间的交互需求,尤其是在Flex(一种基于Adobe Flash的开发框架)的应用中。Flex是使用ActionScript编写,而网页环境通常由HTML和JavaScript控制...
然后在JavaScript中,可以像调用本地函数一样调用Flex组件的方法: ```javascript var swf = document.getElementById('flexComponentId'); swf.jsFunctionName('parameters'); ``` Flex也能监听JavaScript...
此外,为了安全原因,ActionScript只能调用在HTML页面中明确列出的JavaScript函数。 6. **性能考虑** 由于JavaScript和ActionScript之间的通信涉及到浏览器和Flash Player之间的跨域调用,因此可能会有性能开销。...
Flex与JavaScript的相互通信是Web开发中的一个重要技术,它允许富互联网应用程序(RIA)如Flex应用与网页中的JavaScript代码进行交互,实现更丰富的用户体验。本文将深入探讨这一主题,结合给定的压缩包文件...
4. **Flex调用JavaScript**: - 当Flex需要调用JavaScript函数时,可以使用`ExternalInterface.call()`方法: ```actionscript ExternalInterface.call("jsFunctionName", "参数1", "参数2"); ``` - JavaScript...
标题"flex和javascript交互例子"指向了这个主题的核心——如何在Flex应用中调用JavaScript函数,以及反过来在JavaScript中调用Flex的方法。这种技术通常被称为“Bridge”或“跨域通信”。 在Flex中,我们可以使用`...
通过ExternalInterface,Flash可以调用JavaScript函数,而JavaScript也可以调用Flash中的方法。 在提供的压缩包文件中,包含了两个工程目录:一个为Flash程序,另一个为Flex工程。这表明你需要分别在Flash ...
在压缩包中的未命名-1.fla文件很可能是Flash的源文件,包含了可以被Flex调用的函数。 5. **开发工具**: 开发Flex应用程序通常使用Adobe Flex Builder或IntelliJ IDEA等集成开发环境,而Flash则使用Adobe Animate ...
使用`ExternalInterface.call`方法,你可以从Flex应用中调用JavaScript函数。例如,你想在JavaScript中执行一个名为`myJSFunction`的函数,并传递参数`arg1`和`arg2`: ```as3 var result:Object = ...
在IT行业中,`flex iframe js`是一个特定的技术领域,它涉及到使用JavaScript与Adobe Flex应用程序进行交互,特别是通过IFrame(内联框架)实现。本文将深入探讨这一技术,包括其工作原理、应用场景以及如何实现AS...
Flex ActionScript与JavaScript之间的通信是Web开发中的一个重要概念,它允许在Adobe Flash Player中的Flex应用程序与HTML页面上的JavaScript代码之间交换数据和控制交互。这种通信机制对于创建富互联网应用程序...
在Flex开发中,JavaScript(JS)代码的使用主要集中在与ActionScript(AS)的交互上,因为Flex主要是基于Adobe Flex SDK和Flash Player或Adobe AIR来创建富互联网应用程序(RIA)。以下是一些关于在Flex中使用...
3. **调用网页功能**:在Flash中,AS可以调用JavaScript函数来操作DOM,实现如弹窗、导航等网页行为。 4. **数据共享**:例如,在单页应用中,AS和JS可能需要共享用户输入的数据或应用程序状态。 在给定的文件中,...
在HTML页面中,我们需要定义相应的JavaScript函数: ```html <SCRIPT LANGUAGE="JavaScript"> function changeDocumentTitle(a) { window.document.title = a; return "successful"; } ``` 需要注意的是,...
当在Flex中调用JavaScript函数时,这个调用会被转换为Flash Player的消息,然后由Player传递给宿主浏览器,再由浏览器执行相应的JavaScript代码。 4. **JavaScript到Flex的通信**:JavaScript可以通过调用...
在FLEX应用中,我们可以通过Flash External Interface来调用JavaScript函数,从而与百度地图API交互。 实现步骤如下: 1. **设置HTML容器**:在FLEX应用中,你需要有一个HTML面板来承载百度地图的HTML代码。使用`...
在Flex应用中,你可以通过`ExternalInterface.call`方法调用AS2的函数,而在AS2代码中,你可以监听`external`对象的`call`事件来响应Flex的调用。 2. **LocalConnection:** `LocalConnection`对象允许在不同的...
1. **ActionScript 3 (AS3)与JavaScript通信**: - **Bridge技术**:AS3和JavaScript之间的通信主要通过Flash Player的`ExternalInterface`类实现。`ExternalInterface.addCallback`方法用于在AS3中注册一个函数,...
该技术不仅使得Flex能够直接访问浏览器环境中的JavaScript函数,还允许JavaScript调用Flex中的方法。这对于构建动态且交互性高的Web应用非常有用。此外,这种方式还简化了前端开发过程,提高了开发效率。