一,在Flex中,addCallack所输出供给JS调用的函数名称不能与JS中己有的函数名称相重复:
ExternalInterface.addCallback("play",callThis);
上面这一句在IE中就发生错误,因为“play”这个函数名称已经被分配给DOM元素了,改一个名字就可以了,如下就正确了。
ExternalInterface.addCallback("MyPlay",callThis);
二,在向页面中嵌入swf文件时,要用Adobe的官方JS文件或者版本为2.+的SWFOBJECT。
Adobe的官方JS文件就是AC_OETags.js文件,如果你用的是Flex SDK,可以在Flex SDK安装目录下的templates文件夹中找。在用AC_OETags.js文件时,请把下面这段代码加入到页面中:
function getMovie(movieName){
if (navigator.appName.indexOf("Microsoft")!=-1){
return window[movieName];
}else{
return document[movieName];
}
}
用下面的代码调用Flex中的命令:getMovie('MyFlex').MyPlay();
如果使用的是SWFOBJECT,请使用2.0或2.0以上的版本,使用方法可以查看《翻译:SWFOBJECT 2.0官方文档》,然后使用如下语句调用Flex中的命令:swfobject.getObjectById("MyFlex").MyPlay();
mxml文件代码如下 :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="init();" layout="vertical" verticalAlign="middle" horizontalAlign="center">
<mx:Script>
<![CDATA[
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
public function init():void{
btn.addEventListener(MouseEvent.CLICK, btnClick);
ExternalInterface.addCallback("jsCallFlex",callThis);
}
public function btnClick(evt:MouseEvent):void{
ExternalInterface.call("alert","Flex调用JS方法!");
}
public function callThis():void{
mx.controls.Alert.show('JS调用Flex内部方法!');
}
]]>
</mx:Script>
<mx:Button label="点击这里" id="btn" />
</mx:Application>
html文件代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<title>AddCallBack几个bug的解决方法</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<script type="text/javascript" src="swfobject.js"></script>
</head>
<body>
<div style="text-align:center;">
<div>
<object id="flexApp" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="500" height="320">
<param name="movie" value="addCallBack.swf" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="addCallBack.swf" width="500" height="320">
<!--<![endif]-->
<div>
<h1>Alternative content</h1>
<p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
</div>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
<p><input type="button" value="点击这里" id="myBtn" /></p></div>
<script type="text/javascript">
//<![CDATA[
swfobject.registerObject("flexApp", "9.0.0", "expressInstall.swf");
document.getElementById('myBtn').onclick=function(){
var obj = swfobject.getObjectById("flexApp");
if(obj){
obj.jsCallFlex();
}
};
//]]>
</script>
</body></html>
三,Flex中调用“init()”语句的命令最好放在“applicationComplete”中。
即mxml文件代码中的第二行:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="init();" layout="vertical" verticalAlign="middle" horizontalAlign="center">
因为有时JS调用Flex的命令中需要用到Flex的组件做出反应,如果用creationComplete 调用“init()”有可能会发错,所以最好是用applicationComplete。creationComplete是在组件定义完成并已经在显示列表时触发,而applicationComplete是在所有的组件初始化完成并显示时触发。关于此方面的更多详情请查看Flex Application 初始化顺序。
四,注意页面文件编码格式
即文件的encoding类型,这个本来不算问题的,但却让我碰到了,文件编码格式不对称有时在IE中显示不了内容。
分享到:
相关推荐
自己总结的javascript与flex的交互还算详细
actionscript与javascript交互
flex与javascript交互利用externalinterface.callback函数进行。
很简单的一个flex与JS交互的例子, 直接在html-template文件夹下修改index.template.html文件实现此例.
Flex与.NET交互。 第三方代码FluorineFx 传递一个简单的对象。 Flex前段不需要配置。
在c#中用flex做界面展示时,想要从c#调用flex的方法,或者flex调用c#方法,本文中详细描述清楚了。
NULL 博文链接:https://fengzheng0603.iteye.com/blog/1513718
flex与js交互 关于ExternalInterface使用的小例子
flex与ajax交互、flex与javascript交互
Flex与后台交互的几种方法详解
flex数据交互_方式
myamfphp 实现php与flex交互
flex与js交互 flex调用 js 和js调用flex
Flex 和 Java的交互实例.非常值得参考
Flex和java交互搭建,新手可以用来练手,简单易懂
在使用c#播放flex的swf文件时,想要从调用flex方法,或者希望从flex中调用到c#方法的话,看着我共享的教程文档和这里的源代码,很轻松就能学会了,话说自认为讲的很详细了,这个里面是C#端的代码和flex端的代码,...
Flex与JavaScript交互实例,已测试过
flex和javascript交互.在Flex中可以用ExternalInterface来调用Flex的方法
Flex与Applet交互 Flex与Applet交互 Flex与Applet交互 Flex与Applet交互 Flex与Applet交互 自己看代码
Flex和java交互的示例代码,给出的Flex部分:前端界面和vo,后端Java部分,以及配置部分。注意:我直接用的JDBC连接MySql,且只做了数据显示,没有增修改删除。