`

Flex3与Flash使用总结

    博客分类:
  • flex
阅读更多

下面是别人积累的一堆心得体会,对错自己分辨


1) 如果是通过Embed来嵌入swf的话,Flex3只支持FlashCS2所创建的swf.
2) 如果是通过loader来加载的话,只有AS3的swf才能在加载后被控制(这和第一点相反,我花了很长时间才弄明发现这两点,汗!)
3) 如果要直接加载到Flex当中,类必须继承UIComponent,这好比在Flash中必须继承DisplayObject
4) 如果要把Flash的组建打包给Flex使用,应该使用FlexComponentKit,把MC导出成swc。然后在Flex中把swc配置到Library Path后,对应的组建就可以作为一等公明在Flex中使用了。如果MC是绑定了类的,那么对应类继承UIComponent就可以了。
在googleDocs下了一个corelib包,蛮实用的(前段时间还自己写trim,浪费时间啊),E文看得累,以备以后查看
//图相用法
import com.adobe.images.JPGEncoder;
public function submit():void {
var encoder:JPGEncoder = new JPGEncoder(80);
var bytes:ByteArray = encoder.encode(getBitmapData());
var request:URLRequest = new URLRequest(UPLOAD_PAGE);
//data值就为图片编码数据ByteArray;
request.data = bytes;
request.method = URLRequestMethod.POST;
//这个是关键,内容类型必须是下面文件流形式;
request.contentType = “application/octet-stream”;
var loader:URLLoader = new URLLoader();
loader.load(request);
}


//加密用法
import com.adobe.crypto.SHA1;
trace(SHA1.hash(”132″));


//utils包比较繁锁,全都是静态方法
import com.adobe.utils.ArrayUtil;
ArrayUtil.arrayContainsValue(arr, value);//arr是否包含value
ArrayUtil.arraysAreEqual(arr1, arr2);//arr1,arr2是否相等
ArrayUtil.copyArray(a);//深拷贝
ArrayUtil.removeValueFromArray(arr, value);//删除值value
import com.adobe.utils.StringUtil;
StringUtil.beginsWith(str1, str2);//str1是否以str2开头
StringUtil.endsWith(str1, str2);//str1是否以str2结束
StringUtil.ltrim(str);//去左空格
StringUtil.rtrim();
StringUtil.trim();
StringUtil.remove(str1, str2);//从str1删除str2
StringUtil.replace(input, replace, replaceWith);//把input中的replace置换为replaceWith
StringUtil.stringsAreEqual(s1, s2, caseSensitive);//s1,s2是否相等,caseSensitive是否大小写敏感


import com.adobe.utils.DateUtil;
DateUtil.compareDates(d1, d2);//比较,d1>d2返回-1,=返回0,<返回1
DateUtil.getAMPM(d);//返回AM or PM
….功能比较全, 太多了, 还有几个不知道


import com.adobe.utils.NumberFormatter;
NumberFormatter.addLeadingZero(5);//返回补0的数,如1变成01
import com.adobe.utils.IntUtil;
IntUtil.toHex(n,bigEndian);//16进制,bigEndian指定是后补0,还是前补0
IntUtil.rol(n, m);//n右移m位(位运算)
IntUtil.ror(n, m);//左移
import com.adobe.utils.DictionaryUtil;
DictionaryUtil.getKeys(d);//得到键名
DictionaryUtil.getValues(d);//得到值


import com.adobe.utils.XMLUtil;
这个还不会用,以后慢慢摸,本来AS3的XML就很完善了


corelib包下载地址
Flash跨域调用问题
由于安全沙箱的限制, 处于不同域下的文件(swf, xml等)在默认状态下是不能相互调用的. 比如A域名下的flash不能访问B域名下的XML. 除非B域名在根目录下的”crossdomain.xml”文档中包含A域名. 但存在以下问题:
1) 不允许改动根目录
解决方法: 在AS3允许crossdomain.xml不在根目录中,这时就要用 Security.loadPolicyFile(”http://www.example.com/sub/dir/pf.xml”);这样的方法来指 定. 当然只有crossdomain.xml所在目录是可以访问的.
2) 不允许添加crossdomain.xml
解决方法: 如果要被读取的是swf文件, 只要在主函数中加入flash.system.Security.allDomain(”A”)即可. 但如果是其他各式的文件, 比如xml文档的话怎么办呢? 可以把xml读取到B上的b.swf(b上加入flash.system.Security.allDomain(”A”)). 然后在A的a.swf中加载b.swf,然后读取b.swf中的xml. 类似于:
_mc =event.target.content as Sprite;
trace(_mc["var"]);


Loader与URLLoader的比较
AS3已经中Loader与URLLoader是两个比较容易混淆的类,特此区分:
应用范围
Loader: swf,图片(jpg,png,gif)
URLLoader:文本文件(xml,php,jsp…)
使用方法
Loader:
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
private function loadComplete(event:Event)
{ trace(”done”);addChild(loader);}
URLLoader:
xmlLoader.dataFormat=URLLoaderDataFormat.TEXT;
xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);
private function xmlLoaded(event:Event)
{
try {myXML = XML(event.target.data);area.text=myXML;}
catch (e:TypeError) {area.text=”Load faild:\n”+e.message;}
}
AS3-点阵化文字
上面是这两天做的一个小东西,它能够把输入的文字用点阵来描述,并存这些信息存入一个数组当中。然后用这个数组来重新生成“文字”,这些“文字”可以由任意的Sprite组成,并且可以随意加上动画。
承蒙大家厚爱,把源文件放在这里供大家下载。为了便于将来扩展,我使用的是Observer设计模式,希望不会把大家搞混淆。
源文件下载
Javascript与Flash互动
在SwfObject解决Html与Flash 之间传递参数问题中已经简要介绍了如何使用SwfObject在页面中插入Flash,如何在初始时由JS向Flash传递参数,以及运行时Flash如 何调用JavaScript中函数。这里主要介绍运行时JavaScript如何互相传递参数, 并控制Flash的播放。
源文件下载
其实JS能直接控制Flash的播放,主要通过下列方法实现:
Play() —————————————- 播放动画
StopPlay()————————————停止动画
IsPlaying()———————————– 动画是否正在播放
GotoFrame(frame_number)—————- 跳转到某帧
TotalFrames()——————————- 获取动画总帧数
CurrentFrame()——————————回传当前动画所在帧数-1
Rewind()————————————-使动画返回第一帧
SetZoomRect(left,top,right,buttom)——-放大指定区域
Zoom(percent)——————————改变动画大小
Pan(x_position,y_position,unit)————使动画在x,y方向上平移
PercentLoaded()—————————-返回动画被载入的百分比
LoadMovie(level_number,path)———– 加载动画
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数
TGotoLabel(movie_clip,label_name)—— movie_clip跳转到指定标签
TCurrentFrame(movie_clip)————— 回传movie_clip当前帧-1
TCurrentLabel(movie_clip)—————–回传movie_clip当前标签
TPlay(movie_clip)—————————播放movie_clip
TStopPlay(movie_clip)———————-停止movie_clip的播放
GetVariable(variable_name)—————–获取变量
SetVariable(variable_name,value)———–变量赋值
TCallFrame(movie_clip,frame_number)—call指定帧上的action
TCallLabel(movie_clip,label)—————-call指定标签上的action
TGetProperty(movie_clip,property)——–获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)-设置movie_clip的指定属性
Read the rest of this entry »
Flash中组件(Component)的创建和使用
这里简要介绍Flash中自定义组建的创建和使用方法.由于工作的原因,我用的是AS2, AS3的应该类似。
组建的创建
1 创建一个类文件,比如ClassLoader。这个文件实现组件的主要功能。它可以调用其它类,比如cn.adamstudio.effects.TextAnimation(这个类自己写,可以是简单的一个trace),这些类将会自动打包到组件中。
//ClassLoader类:
[IconFile("spidercore.png")];
class ClassLoader extends MovieClip
{
public function setSize()
{
_width=18;
_height=18;
}
public function doNothing():Void
{
// Trick the compiler into including
// the TextAnimation class in the component.
cn.adamstudio.effects.TextAnimation;
}
}
2 创建一个Fla文件,如SWC_Generator。在其中新建一个MovieClip,如swc, 设置如下图:
3 在库中这个MC上右键,在右键菜单里选择”Component Definition…”.设置如下图:
4 此时在库面板中可以看出,MC已经转换成了一个元件.因为元件处在编辑状态.所以直接导入一个png图标到舞台上,如icon.png.这个图标是新建组建的图形标志,将来在库面板和舞台上将会看到它的身影.
5 在库中这个MC上右键,在右键菜单里选择”Export SWC File …”,保存SWC文件.
组建的使用
1 将生成的SWC文件拷入:
C:\Documents and Settings\User \Local Settings\ Application Data \Adobe \Flash CS3 \en \Configuration\Components\swc
2 新建一个Flash文件,如test.fla.在Flash中重新打开Component面板后,会发现swc目录下有我们拷入的SWC文件.将其拖入舞台后,在舞台上删除之.(只需要它在库中).
3 在第一帧上加入代码:
import cn.adamstudio.effects.TextAnimation;
var textAni=new TextAnimation;
即使本地电脑中没有cn.adamstudio.effects.TextAnimation,程序照样能运行,因为它这个类已经包含在了SWC文件当中.
注:SWC_Generator.fla和test.fla的输出设置都应该选择AS2,否则无法得到正确结果;
源文件下载:源文件
AS2 - 创建MovieClip的子类
在Flash中作视觉表现时,常常需要创建MovieClip的子类。下面是一个不错的框架:
Avatar子类:
class cn.adamstudio.Avatar extends MovieClip
{
//定义静态变量,用于初始化
public static var HAPPY:Number = 0;
public static var SAD:Number = 1;
public static var IDLE:Number = 2;
//定义静态方法,用于简洁地创建自己的instance
public static function createAvatar(name:String, target:MovieClip, depth:Number, x:Number, y:Number):Avatar
{
var av:Avatar = Avatar(target.attachMovie(”AvatarSymbol”, name, depth));
av.init(x,y);
return av;
}
//设置instance的坐标
public function init(x:Number, y:Number):Void
{
setState(Avatar.HAPPY);
this._x = x;
this._y = y;
}
//初始化instance
public function setState(newState:Number):Void
{
switch (newState) {
case Avatar.HAPPY :
this.gotoAndStop(”HAPPY”);
break;
case Avatar.SAD :
this.gotoAndStop(”SAD”);
break;
case Avatar.IDLE :
this.gotoAndStop(”IDLE”);
break;
}
}
}
注:其中的静态变量和静态函数是可选的,可以根据需求的不同而有所变化。
主文档中:
import cn.adamstudio.Avatar;
var av:Avatar=Avatar.createAvatar(”avatar”,_root,0,200,200);
这种方法的特点和优点是用使用子类的静态方法来实例化MovieClip的子类,在主文档中非常简洁。
源文件下载
AS-可正可负随机数的算法
我以前的写法都是:
Math.random()*2-1
今天看到一个比较有意思的写法:
Math.random()-Math.random()
AS3鼠标坐标总结
鼠标是Flash里追主要的互动因素,经常需要侦测鼠标事件(AS3中鼠标事件小结)和得到鼠标的坐标。鼠标坐标的获取可以分为在文档类和在子类中,两种不同的情况。
1)如果是在时间线轴上,或者文档类上使用:
stage.mouseX 和 stage.mouseY
2)在子类(如_sprite:Sprite)上使用:
_sprite.mouseX 和 _sprite.mouseY
这里得到的是鼠标相对于_sprite的坐标。如果需要的是相对于舞台的坐标,则应该使用localToGlobal,如:
var mousePoint:Point=new Point(_sprite.mouseX, _sprite.mouseY);
mousePoint=_sprite.localToGlobal(mousePoint);
trace(”Stage coordinates:”+mousePoint);
注:要使用以上代码别忘了 import flash.geom.Point;
AS3练习-往返运动
这是今天做的一个AS3的运动练习,主要是加速和减速运动的配合。发现粒子多了就会出现一些奇怪的现象,比如偶尔会几个粒子在原位置闪动。可能更Flash的代码执行顺序有关,暂时还搞不懂。
as3运行时错误中文说明
1000 系统内存不足。 系统可用内存无法满足 Flash Player 编译代码的需要。请关闭系统上正在运行的某些应用程序或进程。
1001 未实现方法 _。
1002 Number.toPrecision 的范围是 1 至 21。Number.toFixed 和 Number.toExponential 的范围是 0 至 20。指定的值不在期望范围之内。 指定的值不在 precision 参数的期望范围之内。Number.toPrecision 的范围是 1 至 21。Number.toFixed 和 Number.toExponential 的范围是 0 至 20。
1003 radix 参数必须介于 2 至 36 之间;得到 _。 为方法或属性的 radix 参数传递的值小于 2 或大于 36。请传递一个介于 2 至 36 之间的值作为 radix 参数。
1004 对不兼容的对象调用方法 _。 尝试调用的方法不适用于指定对象。如果已将原型函数从一个对象复制到另一个对象然后又调用此函数,但目标对象类型与原始对象类型不同,则会发生此错 误。请确保目标对象与原始对象的类型相同。有关详细信息,请参阅 ECMAScript Language Specification(《ECMAScript 语言规范》)第 3 版中的第 15 章。
1005 数组索引不是正整数 (_)。 尝试使用非正整数的索引值访问数组成员。仅传递正整数作为数组的索引值。
1006 _ 不是函数。 尝试调用不存在的函数时,发生此错误。请确保正在调用正确的函数且自 ActionScript 2.0 以来此 API 尚未发生更改。此外,请确保正在使用正确的对象。例如,使用以下代码时,将出现此错误(由于最后一行错误调用了变量 big 而未调用变量 blg):
var blg:String = “foo”;
var big:Sprite = new Sprite();
var error:int = big.length();
1007 尝试对非构造函数进行实例化。
1008 _ 指代不明确;发现多个匹配的绑定。
1009 无法访问空对象引用的属性或方法。 计算结果为 null 的对象可以不包含任何属性。在某些意外(尽管有效)的情况下,可能发生此错误。以创建 Sprite 对象的以下代码为例。由于从未将此 Sprite 对象添加到显示列表中(使用 DisplayObjectContainer 对象的 addChild() 方法),因此其 stage 属性设置为 null。在这种情况下,此示例将生成此错误,这是因为 Sprite 对象的 stage 属性不能拥有任何属性: Read the rest of this entry »
AIR-最新RSSReader(基于Flash)
经过长时间的努力,终于用Flash CS3+AS3+AIR Beta2做出了RSSReader 2.0。
前一段时间用html+JS做了个WordpressReader, 虽然实现了自动升级,等很cool的功能,但界面还是比较简朴。
AIR读取Blog RSS - Adobe AIR Beta2 实践
WordpressReader 1.1 完成
这次做的RSSReader是基于ActionScript3的,界面漂亮了很多,而且用户体验也有了显著的提高。
程序下载:http://www.adamstudio.cn/blog/download/RSSReader.air
初始介面:
文章阅读界面:
实现的功能:
1 读取服务器端XML文档;
2 将读取的XML文档储存到AIR的内建本地数据库SQLite !!!(太酷了!)
3 判断网络连接状况,如果网络畅通就读取并以动画的形式展示文章标题,同时用最新文章刷新SQLite中已有文章。如果网络不通,则读取并显示SQLite中储存的文章;
4 以动画形式展示动画文章标题;
5 自定义事件和文章标题与文章内容之间的切换。
多说也无用,试用一下你就知道Adobe AIR有多强了!
程序下载:http://www.adamstudio.cn/blog/download/RSSReader.air
Flash-navigateToURL取代getURL
AS3中使用 navigateToURL取代了getURL,个人感觉navigateToURL最大的好处就是方便了传递参数,不足的地方嘛,据说弹出的新窗口会被 浏览器拦截。需要使用:ExternalInterface.call(”window.open”,winurl,””);来避免,但是这是采用了调用 JS来做,是必须在浏览器支撑并且JS可以使用的情况下(没有测试)。
另外发现在Adobe AIR中使用navigateToURL打开连接时,只能在新窗口中打开(不会被浏览器拦截),”_self”,”_parent”,”_top”都没有用.而且都是调用浏览器,而不是在AIR中打开.
具体用法如下:
package {
import flash.display.Sprite;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.net.URLVariables;
public class NavigateToURLExample extends Sprite {
public function NavigateToURLExample() {
var  url:String   = “http://www.adobe.com”;
var variables:URLVariables = new URLVariables();
variables.exampleSessionId = new Date().getTime();
variables.exampleUserLabel = “Your Name”;
var request:URLRequest = new URLRequest(url);
request.data = variables;
try {
navigateToURL(request);
}
catch (e:Error) {
// handle error here
}
}
}
}
Flash-如何改变动态文本透明度?
因为Flash的系统字体不直接支持透明,所以我们得通过嵌入字体或者Filter类来解决。简单地通过改变动态文本的alpha或者它做在的mc的alpha都是没有用的。
1 嵌入字体
这种方法最简单,选中动态文本框,然后在属性面板中点嵌入(“Embed”)按钮,按后选择要全部字库嵌入,还是只嵌入部分字符。但代价是文件会变大,尤其在嵌入中文字体的时候,绝对是噩梦。当然只是嵌入下载进度0-9这样简单的几个字符,还是非常方便的。
2 Filter
这是从Blueidea学来的,就是给动态文本增加一个滤镜,即使是空滤镜也可以。
AS3中代码
//建立动态文本
var my_txt:TextField=new TextField();
my_txt.autoSize = TextFieldAutoSize.LEFT;
my_txt.background = true;
my_txt.border = true;
my_txt.text = “Hello world and welcome to the show.”;
//定义滤镜
var txt_blur:BlurFilter = new BlurFilter(0, 0, 0);
my_txt.filters = [txt_blur];
my_txt.alpha = 0.5;
//加入动态文本
my_txt.x=my_txt.y=50;
addChild(my_txt);
AS2中代码
import flash.filters.BlurFilter;
var txt_blur:BlurFilter = new BlurFilter(0, 0, 0);
this.createTextField(”my_txt”, 1, 100, 100, 300, 100);
my_txt.text = “DDGGDGDGDGDG”;
my_txt.filters = [txt_blur];
my_txt._alpha = 50;
3 BitmapData 和 ColorMatrixFilter
据HbrO说BitmapData和ColorMatrixFilter也能实现动态文本的半透明效果。但我这人比较懒,发现一种方法之后就犯懒了。以后有时间再研究吧 ,哈哈。
AS3中鼠标事件小结
鼠标事件(MouseEvent)和鼠标位置(AS3鼠标坐标总结)是 RIA中最重要的人机交互途径。最近在做一个动态产品展示的系统ProdutShow的时候才发现自己对鼠标事件的了解有多么肤浅。现在 ProductShow已经做完了,这里把在使用鼠标事件时要注意的问题总结一下:
1 鼠标事件分为MOUSE_OVER, MOUSE_MOVE, MOUSE_DOWN, MOUSE_UP, MOUSE_OUT, MOUSE_WHEEL和MOUSE_LEAVE。其中前六个事件都来自flash.events.MouseEvent类,最后一个 MOUSE_LEAVE却是来自flash.events.Event,在导入类包的时候一定要注意这个问题,因为我在这点上就花了很长时间调试,才得发 现问题所在。
MOUSE_OVER - 鼠标移动到目标对象之上时触发, 可以用于模拟按钮的mouse over效果;
MOUSE_MOVE - 鼠标在目标对象之上移动时触发,主要用于判断。比如判断在拖拽实例时,实例是否在允许的范围之内,如果超出,立刻停止拖拽或者重新设定实例的坐标;
MOUSE_DOWN - 鼠标在目标对象之上按下时触发。注意,只有按下鼠标左键时才会触发,右键和滚轮都不会触发。在目标对象之外按下鼠标左键,再移动到目标对象之上时,也不会触发;
MOUSE_UP - 鼠标在目标对象之上松开时触发。注意,只有松开鼠标左键时才会触发,右键和滚轮都不会触发。在目标对象之上按下鼠标左键,再移动到目标对象之外松开时,不会触发。但在目标对象之外按下鼠标左键,再移动到目标对象之上松开时,就会触发。
MOUSE_OUT- 鼠标移动到目标对象之外时触发。
MOUSE_WHEEL - 鼠标在目标对象之上转动滚轮时触发。
MOUSE_LEAVE - 当光标离开舞台时触发(stage.addEventListener(Event.MOUSE_LEAVE,leaveHandler);)。在使用自 定鼠标后,在鼠标离开舞台时,触发MOUSE_LEAVE事件,然后可以把自定义的鼠标隐藏掉,避免还停留在舞台上。
2 mouseChildren。目标对象中含有子实例时,感应鼠标行为的是子时列,而非目标对象。如果使用 cursor.mouseEnabled=false; 就可以由目标对象来更应鼠标行为。
3 mouseEnabled。当实例重叠时,出于显示列表上方的实例总比下方实例更有优先权感应鼠标行为。当想让下方实例感应鼠标行为时使用 cursor.mouseEnabled=false; 即可。这常用于自定义鼠标后,去除自定义鼠标对鼠标行为的干涉,因为自定义鼠标往往一直处于鼠标下方,其他实例无法再感应到鼠标的变化。
另外,也许DOUBLE_CLICK也应该算做鼠标事件,但要使用它,必须先让doubleClickEnabled=true:
var bg:Sprite=new Sprite();
bg.doubleClickEnabled=true;
bg.addEventListener(MouseEvent.DOUBLE_CLICK,clickHandler);

typeof、is、as的区别
typeof、is、as都是用于判断变量类型的,只是各自的返回值不同。请看下方代码:
var a:Number=0;
trace(typeof(a));//输出:Number
trace(typeof(typeof(a)));//输出:String
trace(a is Number);//输出:true
trace(a as Number);//输出:0
trace(a as String);//输出:null
Null、NaN和undefined的区别
其实Null、NaN和undefined都是变量的默认初始值。变量类型不同,系统给与的初始值就不同:
int,uint - 0
Boolean - false
Number - NaN
String,Array,Object - null
未指定变量类型 - undefined
SwfObject解决Html与Flash之间传递参数问题
在彻底摒弃Adobe的 激活ActiveX控件的方法一文中已经详细分析了使用Adobe提供的AC_RunActiveContent.js导致HTML与Flash之间不能 传递参数的问题。经过Adobe论坛里GWD的提示,我转而寻求SwfObject的帮助。发现SwfObject是一个很好的解决方案。
SwfObject英文介绍:http://blog.deconcept.com/swfobject/
SwfObject中文翻译:http://www.awflasher.com/flash/articles/swfobj.htm
源文件:SWFObject 1.5
关于SwfObject的介绍上面两篇文章已经讲的很详细了。我这里只列一段标准的应用和一些上面两篇文章没有提到的问题.
Html中的JS代码
<script type=”text/javascript” src=”swfobject.js”></script>
<script type=”text/javascript”>
// <![CDATA[
var so = new SWFObject("asCallJs.swf", "MyDemo", "500", "400", "9", "#FF6600");
so.addVariable("param1", "Parameter1"); // this line is optional, but this example uses the variable and displays this text inside the flash movie
so.addVariable("param2", "Parameter2");
so.useExpressInstall('expressinstall.swf');
so.write("flashcontent");
// ]]>
</script><!–被AS调用的JS函数–>
<script language=”Javascript”>
// <![CDATA[
// adds two numbers, and sends the result back to ActionScript
function addNumbers(num1, num2)
{
result=num1 + num2;
alert("3+7=" + result);
return (result);
}
// ]]>
</script> Read the rest of this entry »
彻底摒弃Adobe的激活ActiveX控件的方法
大家知道,在IE中只有激活了 ActiveX控件,Flash才能够与浏览者交互,否则得手动点一下激活。Flash也提供了一个很“方便”的解决方案,就是在发布swf文件的同时, 发布html文件即可。这样Flash会在生成一个swf文件,一个包含swf的Html文件,和一个“AC_RunActiveContent.js” 文件。Html文件通过调用AC_RunActiveContent.js,实现激活ActiveX控件。这一切都很便捷,直到你希望在html和 Flash之间传递参数。
问题出现
在很多商业网站中,都涉及到用同一个Flash来显示大量不同的内容(图片,视频或产品信息等),这就需要向这个Flash传递参数。常见的传参方法有三种,但都会受到AC_RunActiveContent.js的不良影响。
1 ExternalInterface: 这是困扰我最久的一个问题。据Adobe的描述,这是最好的传参方法,能都非常自由和直接地在AS和JS之间互相传递参数或者互相调用函数。但我在使用 Adobe的示例文件时发现,在IE中AS无法得到JS的返回值(ExternalInterface在IE中的Bug),经过不断的尝试才发现是 AC_RunActiveContent.js在捣鬼,只要把它和html中对应代码以 及<noscript></noscript>删除就一切正常了。
请看示例:
Player8,AS2:  http://www.adamstudio.cn/lab/var/test/test_v8.html
Player9,AS3:  http://www.adamstudio.cn/lab/var/test/test_v9.html
如果带有激活ActiveX控件的那段JS代码,IE中就无法得到返回值,请看:
http://www.adamstudio.cn/lab/var/test/test_error.html
所有源文件:http://www.adamstudio.cn/lab/var/test/test.rar
2 FlashVars:
3 URL传递参数
后 两种方法受AC_RunActiveContent.js的影响更大,因为这两种方法都是 在<noscript></noscript>之间加入代码,而在JS能运行的浏览器当中(绝大多数浏览器都能运行JS),这些 代码根本就不会运行。所以无论在Firefox或者IE中都不起任何作用!
也就是说常用的三种在Html与AS之间传递参数的方法均受到激活ActiveX控件的那段代码的影响。所以要想在html和Flash之间传递参数,就必须摒弃Flash自带的激活ActiveX控件的方案!
替代方案:SwfObject 请参考SwfObject解决Html与Flash之间传递参数问题

分享到:
评论

相关推荐

    Flashcs3.Flex与asp.php通信总结包含数据库

    Flashcs3.Flex与asp.php之间的通信总结包含数据库,含代码

    Flex builder中用flexpaper在线预览步骤总结

    Flex builder中用flexpaper在线预览步骤总结

    Flash_cs3、Flex与asp、php通信总结(包含数据库)

    看到flash和asp文件时面变量名就知道相互是怎么传送的呢,对于数据库的一些插入,更新,查询的操作,只要接收flash的数据,直接运行asp相关数据库操作命令就行了.直接复制到IIS的路径下即可测试.在线观看地址:...

    总结flex各种用法

    总结flex各种用法,对flash Builder不熟悉的初学者可以下下来看下,方便查找

    Flex内存泄露总结

    Flash Player垃圾回收工作是由垃圾回收器(garbage collector)完成的。垃圾回收器是 运行在后台的一个进程,它释放那些不再被应用所使用对象所占用的内存。不再被应用所 使用的对象是指那些不再会被那些活动着...

    Flex播放器实例带源码的flex制作的播放器

    Flex制作播放器实例一共四个实例,由浅入深。天涯精心总结。完整版的实例。flash播放器。都带源文件

    Flash ActionScript 3.0高级动画教程

    在Flash里使用Pixel Bender 加载或绑定shader 使用shader作为绘制填充 访问shader元数据 设置shader参数值 转换shader填充 用shader填充制作动画 指定shader的输入图片 使用shader作为滤镜 使用shader作为混合模式 ...

    flex自己总结笔记

    创建简单数据对象,数据绑定布局状态 Adoble Flash Player AIR Adobe Integrated Runtime (Adobe 集成运行时)介绍

    flex and blazed blazeds简单例子

    已经在早前就听说了,Adobe公司的开源项目bazeds,可是当时做flash,用到了openamf,所以没有在意,但是现在觉得flex开发应用软件更具有杀伤力,所以准备研究flex。折腾了一周的时间想做个flex+java的helloworld例子...

    [Flash.ActionScript.3.0动画教程

    2.4.2 使用Flex Builder 2.4.3 使用免费的命令行编译器 2.4.4 关于跟踪 2.4.5 缩放影片 2.5 程序动画 2.5.1 动画的执行过程 2.5.2 帧循环 2.5.3 影片事件 2.5.4 事件和事件处理 2.5.5 事件侦听器与处理函数 2.5.6 ...

    Foundation Actionscript 3.0 Animation

    2.4.2使用FlexBuilder 2.4.3使用免费的命令行编译器 2.4.4关于跟踪 2.4.5缩放影片 2.5使用代码动画 2.5.1循环 2.5.2帧循环 2.5.3剪辑事件 2.5.4事件和事件处理器 2.5.5侦听器和处理器 2.5.6动画事件 2.6显示列表 2.7...

    移动设备DPI总结

    移动设备DPI总结 屏幕像素尺寸大小

    asp.net知识库

    使用microsoft.web.ui.webcontrols的TabStrip与IFame组件,达到页的切换效果 HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web...

    WAP 无线应用协议

    1.5 一致性与互通性 9 1.6 未来的工作内容 10 1.7 术语定义 10 1.8 缩略语 11 1.9 参考标准 12 1.10 参考资料 13 第二部分 应用层 第2章 无线应用环境概述 15 2.1 范围 15 2.2 WAE 文档 15 2.2.1 WAE 文档集 15 ...

Global site tag (gtag.js) - Google Analytics