JS与Flex交互的几点注意事项

 
JS与Flex交互的几点注意事项

一,在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').οnclick=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中显示不了内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值