‘Flex&AS3研究’ 分类的存档

PD*914983也谈AS3中的深度复制这篇文章中简单的记录了一些google的总结个人的看法,但终觉不够深入,不够全面。到底哪些类是可以通过序列化和反序列化的方法深复制,哪些类不可以,始终是困扰我的一个迷雾。我曾经试图从as3在内存中的对象模型(感兴趣请猛击这里)入手,来窥探AS3内部的秘密,但这似乎无法直接敲开那所AS3序列化规则的大门。

在上一篇文章中曾经提到,AS3序列化的结果是AMF格式。从这条线索入手,可能会找到些许答案。果然,Adobe在AMF的文档中详细的列出了所有可序列化的数据类型,包括:

阅读全文…

2010年2月5日21:40 | 36 条评论
标签: ,

tn_sandbox_725290816全沙箱问题说白了是个访问资源的权限问题。只不过规则比较复杂,而且需要先理解好多概念。Adobe(或者以前的Macromedia)之所以弄这么复杂的规则,一个很重要的原因就是Flash Player客户端的安全问题。试想如果一个从网络加载的.swf既能访问网络,又能访问本地文件,就相当于在客户端安装了一个木马,还有谁会安装Flash Player。一个.swf能否成功访问某个资源,取决于很多因素,包括:

  1. 访问的资源的类型,或者说访问方式。
  2. .Swf文件的安全沙箱类型。
  3. 访问的资源所处的位置。
  4. 资源的所有者或者创建者对资源赋予的访问权限(crossDomain文件,Security.allowDomain()方法)。
  5. 用户对.swf文件赋予的权限(主要是对麦克风和摄像头的访问)。
  6. Flash Player运行.swf文件的模式。

这里主要讨论了前四个因素。首先要理解一些关键概念,包括什么是安全沙箱,资源的类型,资源的所有者,资源的创建者。理解完这些概念,也就自然会对安全沙箱有一个清晰的认识了。

安全沙箱

安全沙箱是个容易让人迷糊的概念。我第一次看到这个词,觉得是个它容器,在里面的就是安全的。其实,大多数情况下我们提到这个词,往往指的是一个.swf文件的安全沙箱类型(Security-Sandbox-Type)。说白了就是.swf文件的一个属性。就像一个Canvas对象的width属性。一般来说,.swf文件的安全沙箱类型可能是以下几种:

阅读全文…

2009年12月20日12:26 | 22 条评论

引子:作于一名由ASP.NET开发转到Flex开发的程序员,最开始适应的过程是相当愉悦和轻松的。由于我早在ASP.NET中习惯了标签式的布局和对应的code behind的编程方式,在Flex中的MXML语言只不过是MXML元素和AS3语法的重新熟悉。但是就像ASP.NET中的标记语言,MXML只不过是AS3的一种封装,归根到底它会被转化成AS3再进行编译,所以,只有了解这门语言的底层运行机制,才有可能真正成为一名优秀的Flex开发人员。由于有过ASP.NET的开发经验,我清楚地认识到像这种以XML标签为基础的组件式的开发方式,只有弄清楚组件的生命周期,才能进行高级开发,才能在遇到复杂情况时有思路去解决,就像做ASP.NET的开发要熟悉页面的生命周期一样。

为此,我刚接触Flex不久就开始研究Flex组件的生命周期。幸运的是,Flex Builder内嵌的帮助文件十分犀利,很容易就查到了Flex组件的的生命周期部分。不幸的是作为没有Flash开发经验的程序员,对里面的某些名词并不是很明白。就这样在没有Flash基础的情况下,我曾经看过很多遍帮助文件,但感觉脑子里一直不是很清楚,对整个生命周期不能形成一个完整的轮廓。最后终于滤清了一些思路,结果还是停在了一个名词上,叫做“Render Event”。里面两次提到了这个词,都是在关键的地方。前些天搞到了《Essential.ActionScript.3.0》的电子版,阅之如醍醐灌顶,不愧为AS3的经典。其中一章就专门讲了Flash运行时的屏幕更新机制,里面当然也提到了Flex帮助文件中所谓的“Render Event”。

先看看Flex帮助文件是怎么说的吧,这里拷贝了原文(可以先略过,只为提供参考):

阅读全文…

2009年12月1日21:47 | 224 条评论
标签: ,

深度复制(也叫深克隆)在一门成熟的面向对象语言中已经不是什么新鲜的事情了,在Java和.NET中都有着比较完善的实现方式。而在AS3中似乎没有一个完美的解决方案。网上有些所谓的AS3深度复制的终极方案,但都经不起推敲,反倒不如一些虽然不完善但比较客观的论述来的有说服力。最近几天google了很多关于深度复制的资料,也翻了很多各大论坛的老帖子,得出的结论是AS3并不支持复杂对象的深克隆的相关功能。至于是Adobe有意为之,还是机制上的缺陷,不是本文讨论的范畴。写这篇文章,一是对这几天查阅资料的一个总结,再就是记录下我这几天的一些有意义思考。

说到深克隆,思路无非有两个:一是通过序列化和反序列化;二是通过语言的反射机制,递归遍历对象的各级属性,然后copy之。Java和.NET上最成熟的做法是第一条,序列化和反序列化。而且这两种语言在序列化的时候都保存了类型信息,这样做的好处在于反序列化的时候可以把得到的对象转化成对应的类型。而到了AS3中,情况就比较复杂了。
阅读全文…

2009年11月26日22:04 | 评论关闭
标签: ,
Դ