`
gdljg0460
  • 浏览: 43450 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Flex加载swf的几个要点

    博客分类:
  • flex
阅读更多

今天折腾了大半天Flash与Flex3的配合,特总结一下心得体会:
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之间传递参数问题

分享到:
评论
1 楼 bobkingdom 2008-12-30  
精!惊!这么好的贴子居然无人顶,寻寻觅觅好久了,FLEX加载外部SWF或其他页面在项目中碰到非常多,感谢lz.

相关推荐

    Flex 3D特效

    1. **Flex 3D组件**:Flex 3D特效主要通过使用以下几种关键组件来实现: - `mx:ViewStack`:提供在不同视图之间切换的能力,可以用于创建3D翻转效果。 - `mx:Accordion`:允许用户展开和折叠多个面板,可实现3D...

    Flex、Spring、Hibernate 集成

    - **demo_central**:这是一个**Java Web** 项目,主要包括以下几个方面: - 由**Spring** 实现业务逻辑。 - 由**Hibernate** 实现数据库的读写访问控制。 - 通过**BlazeDS** 提供**Flex** 访问的远程对象接口。 ...

    使用FlexBuilder3制作并导出AIR1.0正式版应用

    在压缩包的文件名称列表中,我们可以看到以下几个文件: 1. `mimetype`:这是AIR应用程序的标准文件,用于标识压缩包的类型。在AIR应用程序中,这个文件通常是用来指示其为一个AIR归档文件。 2. `AIRmp3.swf`:这...

    flex测试总结

    在Flex测试中,通常关注以下几个方面: 1. **单元测试**: - 使用FlexUnit或Spock框架编写ActionScript和MXML组件的单元测试,确保代码功能正确。 2. **集成测试**: - 验证不同组件之间的交互,可以使用模拟...

    建设项目管理-勘查设计管理.ppt

    建设项目管理-勘查设计管理.ppt

    实训商业源码-绿色环保设备网站源码-毕业设计.zip

    实训商业源码-绿色环保设备网站源码-毕业设计.zip

    这篇文章是《2025文化营销10大趋势报告》的内容概述,主要分析了当前文化营销领域的关键趋势和发展方向 以下是文章的主要内容总结:

    内容概要:本文介绍了《2025文化营销10大趋势报告.pdf》的主要内容,涵盖了文化营销的十大趋势,包括触摸手工艺的温度、在地叙事走出「在地」、赛博冲浪抢占前排、女性议题长出「新枝」、品牌入「圈」高亮身份标识、以智性声音唤醒内心力量、文化体验迈向品牌主场、文化景观迎来重构浪潮、文化品牌以「生活」做解法、文化复兴正当时。报告通过具体案例分析了品牌如何利用这些趋势与消费者建立深度连接,如通过非遗民艺、圈层文化、文化热点、女性互助等手段,实现品牌价值和文化认同的双赢。 适用人群:市场营销人员、品牌管理者、广告策划人员、文化研究者。 使用场景及目标:①帮助品牌更好地理解当前文化营销的趋势和消费者心理;②指导品牌制定更具针对性和创新性的营销策略;③通过案例学习,提升品牌的文化营销实践能力。 其他说明:本文不仅提供了对文化营销趋势的深入解析,还强调了品牌在进行文化营销时应注重真诚、深度和长期价值,避免表面化和同质化。同时,报告呼吁品牌在营销中尊重和理解文化内核,积极回应社会议题,以实现与消费者的情感共鸣和精神共振。

    实训商业源码-彩虹代刷-毕业设计.zip

    实训商业源码-彩虹代刷-毕业设计.zip

    基于Python与MySQL的小区物业管理系统.zip

    基于Python与MySQL的小区物业管理系统.zip

    基于Python的Keras卷积神经网络图片分类系统.zip

    基于Python的Keras卷积神经网络图片分类系统.zip

    基于MATLAB的电力系统分段电价需求响应算法实现削峰填谷 - 电力系统

    内容概要:本文介绍了利用MATLAB实现电力系统的分段电价需求响应算法,旨在通过调整不同时段的电价变化率来优化电力系统的负荷分布,达到削峰填谷的效果。文中详细解析了程序的关键步骤,包括参数设置、时段处理、负荷总量守恒以及可视化展示。通过设定电价基准和弹性系数矩阵,程序能够模拟不同电价下各时段的负荷需求变化,并确保总用电量保持不变。此外,还展示了如何使用MATLAB内置函数如plotyy进行结果可视化,使电价与负荷需求的变化关系更加直观。 适合人群:从事电力系统研究、智能电网开发的技术人员,以及对电力市场机制感兴趣的学者和学生。 使用场景及目标:适用于电力公司制定合理的电价政策,评估不同电价策略对电力负荷的影响,从而优化资源配置,提高电力系统的稳定性和效率。 其他说明:该模型提供了一种简单而有效的手段来验证价格策略的可行性,帮助决策者在实施新电价政策之前进行充分的风险评估。未来可以进一步扩展模型,引入更多复杂因素如时滞效应和用户行为随机性,使其更接近实际情况。

    欧姆龙PLC NJ系列模切机程序:12轴EtherCAT伺服运动与张力控制的高级应用 - EtherCAT

    内容概要:本文深入介绍了欧姆龙PLC NJ系列模切机程序的设计与实现,涵盖12轴EtherCAT总线伺服运动控制、张力控制PID算法、隔膜自动纠偏控制以及同步运动控制等核心技术。通过结构化编程和ST语言功能块的应用,确保了系统的高精度和稳定性。文中提供了详细的代码示例和技术解析,帮助读者理解每个功能模块的具体实现。 适合人群:具备PLC基础知识并希望深入了解工业自动化控制技术的工程师和技术人员。 使用场景及目标:适用于需要进行多轴运动控制、张力调节和同步操作的工业设备开发和维护。通过学习本项目,读者能够掌握PLC高端复杂应用的实际操作技能,提升解决实际工程问题的能力。 其他说明:本文不仅提供理论讲解,还附有大量实用的代码片段,便于读者动手实践。此外,项目结构规范、注释详尽,有助于提高代码的可读性和可维护性。

    论文模板-html5工业设备网站源码-实训商业源码.zip

    论文模板-html5工业设备网站源码-实训商业源码.zip

    基于Matlab Simulink的直流配电网仿真:下垂控制与VSC换流器模型的电压电流波形及有功功率分析 电力系统

    内容概要:本文详细介绍了利用Matlab Simulink对直流配电网进行仿真的过程,重点展示了下垂控制仿真模型和换流器(VSC)仿真模型。通过这两个模型,作者分析了电压、电流波形及其稳定性,并研究了不同条件下有功功率的变化。文中还提供了一个简化的Matlab代码示例,帮助读者理解和实现直流配电网的建模与仿真。 适合人群:从事电力系统研究的专业人士、高校师生及相关领域的研究人员。 使用场景及目标:适用于希望深入了解直流配电网运行机制和技术细节的人群,旨在提高他们对该领域的理论认知和实践能力。 其他说明:文章不仅提供了理论解释,还包括具体的操作步骤和代码片段,便于读者动手实验。同时强调了直流配电网在未来能源网络发展中的重要性和潜力。

    西门子智能控制设备调试:程序集成、模拟量与通讯控制双重应用,动态图演示与全套EPLAN图纸齐全 · PLC编程

    内容概要:本文介绍了西门子200SMART程序的成功编写及其在工业自动化项目中的应用。该程序实现了模拟量控制和通讯控制两种方式,涵盖了伺服控制和温控表的通讯。程序经过详细的调试,确保设备能够在复杂环境下稳定运行。同时,配备了西门子触摸屏界面,提供设备工作动图和丰富信息展示,便于用户监控和维护。此外,还提供了全套EPLAN图纸,详细展示了设备的电气原理图、接线图和布局图,为设备的安装、调试、维护和升级提供了重要支持。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程、伺服控制和温控系统有需求的专业人士。 使用场景及目标:适用于需要实现高精度控制和稳定通信的工业自动化项目,旨在提高设备运行效率和稳定性,减少故障率并优化维护流程。 其他说明:本文不仅详细记录了程序编写的技术细节,还强调了实际应用中的关键点,如抗干扰措施、通讯故障处理等,为读者提供了宝贵的实践经验。

    操作系统RHEL10.0官网正式版ISO安装镜像

    对于想要部署或体验RHEL10.0的企业用户和个人开发者来说是非常有用的信息。 适合人群:需要部署企业级服务器环境的企业IT管理员、对RHEL系统感兴趣的个人开发者。 使用场景及目标: ①企业IT管理员准备搭建基于RHEL10.0的操作系统环境时可以据此下载所需镜像; ②个人开发者想要学习研究RHEL10.0特性,构建本地测试环境。 链接: https://pan.baidu.com/s/1C-_N5rkJjBD1r7yPRzTKJg?pwd=d3s6 提取码: d3s6 RedHat-10-HashSum.txt Red_Hat_Enterprise_RHEL_Lightspeed-zh-CN.pdf rhel-10.0-x86_64-boot.iso rhel-10.0-x86_64-dvd.iso rhel-10.0-x86_64-kvm.qcow2 rhel-10.0-x86_64-wsl2.tar.gz rhel-rt-10.0-x86_64-dvd.iso virtio-win-1.9.45.iso VMware-workstation-full-17.6.3-24583834.rar Xshell-8.0.0069p 免费直用.rar beat HashSums.txt rhel-10.0-beta-aarch64-dvd.iso rhel-10.0-beta-x86_64-dvd.iso

    三相PWM整流器Simulink仿真:双闭环PI控制与SVPWM调制策略的应用 电能质量 (05月)

    内容概要:本文详细介绍了基于双闭环PI控制和SVPWM调制策略的三相PWM整流器Simulink仿真模型。三相PWM整流器作为一种电力电子装置,主要用于将交流电转换为直流电。文中首先解释了三相PWM整流器的基本概念及其重要性,接着重点阐述了双闭环PI控制(包括电压外环和电流内环)和SVPWM调制策略的具体实现方法。双闭环PI控制确保系统在面对负载突变等复杂工况时仍能保持稳定,而SVPWM调制策略则提高了电压和电流的波形质量,降低了交流侧的谐波含量。最后,通过对仿真结果的分析,展示了该模型在不同工况下的优异整流效果和良好的电能质量提升能力。 适合人群:从事电力电子、自动化控制等领域研究的技术人员和高校相关专业师生。 使用场景及目标:适用于需要深入了解三相PWM整流器工作原理和技术细节的研究人员,帮助他们掌握Simulink仿真工具的使用技巧,以便更好地应用于实际项目中。 其他说明:本文不仅提供了理论知识,还结合了具体的仿真案例,使读者能够更加直观地理解和掌握所涉及的技术要点。

    婚庆公司网络营销策划书.doc

    婚庆公司网络营销策划书.doc

    Simulink与Carsim联合仿真:基于PID与MPC的自适应巡航控制与紧急避撞车辆动力学模型指导

    内容概要:本文详细介绍了如何利用Simulink和Carsim进行联合仿真,实现基于PID和MPC的自适应巡航控制和紧急避撞功能。主要内容包括Carsim参数设置cpar文件、Matlab S函数编写、Simulink车辆动力学模型构建以及远程指导。首先,Carsim参数设置涵盖了车辆基本参数、道路条件和环境因素,确保仿真的准确性。接着,通过编写Matlab S函数实现了PID和MPC控制算法,用于计算控制信号,如油门开度和刹车力度。然后,在Simulink中构建了车辆动力学模型,模拟汽车行驶过程及其物理特性。最后,提供了远程指导功能,便于实时监控和调整实验过程。 适合人群:对汽车驾驶辅助系统感兴趣的科研人员、工程师和技术爱好者。 使用场景及目标:适用于研究和开发自适应巡航控制系统,旨在提高驾驶安全性和舒适性,特别是在复杂交通环境中。 其他说明:随着自动驾驶技术的发展,这种联合仿真的应用前景广阔,能够帮助研究人员更深入地理解和优化汽车行驶过程和动力学特性。

    施工项目管理手册定稿.doc

    施工项目管理手册定稿.doc

Global site tag (gtag.js) - Google Analytics