您的位置:首页 > 移动开发 > Objective-C

swfobject动态创建Flex

2011-05-16 19:30 246 查看
最近在测试项目的时候,当页面上存在多个Flex,并且Flex的数据是由.net提供的xml数据,会发生数据冲突,或者说数据缓存问题..暂且认为是数据缓存了,当加载第二个Flex时候数据会和加载第一个Flex的数据重了..后来通过用js动态创建的方法解决了数据冲突问题.但随之而来的是各浏览器兼容问题。这里我用了swfobject来动态创建Flex来加载Flex,并且每次关闭Flex时候都要将Flex的Html代码移除掉。

swfobject

下载地址:http://code.google.com/p/swfobject/downloads/list

最新版本是2.2.

swfobject的好处就不用多说了下面摘自网络:

1.IE中没有讨厌的虚框问题了。
2.提供了完善的版本检测功能,如果版本不够则显示其他东西,比如图片或文字。
3.易于使用,只要在页面头加载一个.js文件,然后HTML写一个容器,里面放普通的文本或图片(用于无法显示Flash时显示),最后用脚本来替换这个元素里面的内容为Flash。
4.使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。
5.能够避免HTML、XHTML中出现object、embed等非标准标签,从而符合更加标准。

使用也非常简单:

引入swfobject.js

<scriptsrc="js/swfobject.js"type="text/javascript"></script>

在页面中:

//动态创建Flex
functioncreateFlashMove(obj,sName,src,width,height){
varfl=document.getElementById("FlexDiv");
if(fl==null){
varcreteFl=document.createElement("div");
creteFl.id="FlexDiv";
obj.appendChild(creteFl);
}
vardivobj="FlexDiv";
varswfVersionStr="10.0.0";
varxiSwfUrlStr="playerProductInstall.swf";
varflashvars={};
varparams={};
params.quality="high";
params.bgcolor="#ffffff";
params.allowscriptaccess="sameDomain";
params.allowfullscreen="true";
//以下两句是将Flex置于底层.
params.wmode="Opaque";
params.wmode="transparent";
varattributes={};
attributes.id=sName;
attributes.name=sName;
attributes.align="middle";
swfobject.embedSWF(
src,divobj,
width,height,
swfVersionStr,xiSwfUrlStr,
flashvars,params,attributes);
}

obj:是要加载这个Flex的DIVid.(注意:这个Div是要被Flex替换掉的)

sName:是Flex的ID

src:Flex文件地址

因为Flex要通过xml进行交互所以需要通过,net传给Flex数据

functionGetXmlFunction(data){
try{
document.getElementById("TestDrawLine").GetXmlFunction(data);
}
catch(ex){
setTimeout("GetXmlFunction('"+data+"');",30);
}
}

try里面的一句是调用Flex里面添加的外部调用接口.

ExternalInterface.addCallback("GetXMLFunction",goDataXML);

(这里可以通过swfobject里面给Flex传递参数这里有个例子,来达到和Flex交互.)

这里就OK了.也解决了多个Flex在同一个页面冲突的问题.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
章节导航