<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FoxLing - 前端开发 &#187; AS/Flex/AIR</title>
	<atom:link href="http://foxling.org/category/as-flex-air/feed/" rel="self" type="application/rss+xml" />
	<link>http://foxling.org</link>
	<description>不积跬步 无以至千里</description>
	<lastBuildDate>Mon, 05 Jul 2010 16:43:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Flash通过FlashVars接收外部参数</title>
		<link>http://foxling.org/as-flex-air/flash-flashvars/</link>
		<comments>http://foxling.org/as-flex-air/flash-flashvars/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 15:32:42 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[FlashVars]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=416</guid>
		<description><![CDATA[
...
&#60;param name="FlashVars" value="tag=as3"/&#62;
&#60;embed flashvars="tag=as3"/&#62;
...

AS项目，或者Flash里：

stage.loaderInfo.parameters.tag

Flex3项目：

Application.application.parameters.tag

Flex4项目：

FlexGlobals.topLevelApplication.parameters.tag

备忘.
]]></description>
			<content:encoded><![CDATA[<pre>
...
&lt;param name="FlashVars" value="tag=as3"/&gt;
&lt;embed flashvars="tag=as3"/&gt;
...
</pre>
<p>AS项目，或者Flash里：</p>
<pre>
stage.loaderInfo.parameters.tag
</pre>
<p>Flex3项目：</p>
<pre>
Application.application.parameters.tag
</pre>
<p>Flex4项目：</p>
<pre>
FlexGlobals.topLevelApplication.parameters.tag
</pre>
<p>备忘.</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/flash-flashvars/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>查看火兔照片的小玩意，暂且叫PictureLife吧。</title>
		<link>http://foxling.org/as-flex-air/picture-life/</link>
		<comments>http://foxling.org/as-flex-air/picture-life/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 12:45:21 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[嘀咕]]></category>
		<category><![CDATA[火兔]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=406</guid>
		<description><![CDATA[这两天突然好玩做了这么个玩意，输入火兔网的帐号即可浏览该用户的所有照片。
地址：
http://app.foxling.cn/picturelife/
功能：

鼠标拖动：左右滑动，向左滑动时，自动加载更多的照片（前提是还有更多照片&#8230;）
鼠标点击空白区域：缩放到合适大小
鼠标滚轮：放大，缩小显示区域
鼠标点击单张小图：加载该大图，并且放大到原始尺寸。

预览图：
后续：
仓促弄出来玩玩，有待继续改进。
]]></description>
			<content:encoded><![CDATA[<p>这两天突然好玩做了这么个玩意，输入<a href="http://huotu.com" target="_blank">火兔网</a>的帐号即可浏览该用户的所有照片。</p>
<h3>地址：</h3>
<p><a href="http://app.foxling.cn/picturelife/" target="_blank">http://app.foxling.cn/picturelife/</a></p>
<h3>功能：</h3>
<ul>
<li>鼠标拖动：左右滑动，向左滑动时，自动加载更多的照片（前提是还有更多照片&#8230;）</li>
<li>鼠标点击空白区域：缩放到合适大小</li>
<li>鼠标滚轮：放大，缩小显示区域</li>
<li>鼠标点击单张小图：加载该大图，并且放大到原始尺寸。</li>
</ul>
<h3>预览图：</h3>
<div id="attachment_407" class="wp-caption aligncenter" style="width: 610px"><img src="http://foxling.cn/wp-content/uploads/2009/09/picturelife-1.png" alt="预览图1" title="预览图1" width="600" height="288" class="size-full wp-image-407" /><p class="wp-caption-text">预览图1</p></div>
<div id="attachment_408" class="wp-caption aligncenter" style="width: 610px"><img src="http://foxling.cn/wp-content/uploads/2009/09/picturelife-2.png" alt="预览图2" title="预览图2" width="600" height="293" class="size-full wp-image-408" /><p class="wp-caption-text">预览图2</p></div>
<h3>后续：</h3>
<p>仓促弄出来玩玩，有待继续改进。</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/picture-life/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>在Flex中继承ProgrammaticSkin类自定义皮肤</title>
		<link>http://foxling.org/as-flex-air/flex-custom-skins/</link>
		<comments>http://foxling.org/as-flex-air/flex-custom-skins/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 15:06:57 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[ClassReference]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ProgrammaticSkin]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=403</guid>
		<description><![CDATA[通过自定义类的方式创建皮肤，控制性更强，占用的内存更少。
ProgrammaticSkin类是外观元素的基类，它们通过编程方式来绘制自身。
关于ProgrammaticSkin类的更多信息，猛击这里：
http://www.airia.cn/ActionScript3API/livedocs/mx/skins/ProgrammaticSkin.html
自定义类

package skins
{
    import flash.display.GradientType;
    import flash.display.Graphics;

    import mx.skins.ProgrammaticSkin;

    public class CustomBG extends ProgrammaticSkin
    {

        public function CustomBG()
        {
         [...]]]></description>
			<content:encoded><![CDATA[<p>通过自定义类的方式创建皮肤，控制性更强，占用的内存更少。<br />
ProgrammaticSkin类是外观元素的基类，它们通过编程方式来绘制自身。<br />
关于ProgrammaticSkin类的更多信息，猛击这里：<br />
<a href="http://www.airia.cn/ActionScript3API/livedocs/mx/skins/ProgrammaticSkin.html">http://www.airia.cn/ActionScript3API/livedocs/mx/skins/ProgrammaticSkin.html</a></p>
<h3>自定义类</h3>
<pre>
package skins
{
    import flash.display.GradientType;
    import flash.display.Graphics;

    import mx.skins.ProgrammaticSkin;

    public class CustomBG extends ProgrammaticSkin
    {

        public function CustomBG()
        {
            super();
        }

        override protected function updateDisplayList(w:Number, h:Number):void
        {
            super.updateDisplayList(w, h);

            var g:Graphics = graphics;
            var fillColors:Array = [0x191919,0x262626,0x191919];
            var fillAlphas:Array = [1.0,1.0,1.0];
            var fillRatios:Array = [0,127,255]

            g.clear();

            drawRoundRect(0, 0, w, h, 0, fillColors, fillAlphas,
                          horizontalGradientMatrix(0, 0, w, h), GradientType.LINEAR,fillRatios );
        }

        override public function get measuredWidth():Number
        {
            return 8;
        }

        override public function get measuredHeight():Number
        {
            return 8;
        }
    }

}
</pre>
<h3>在CSS中使用ClassReference调用自定义类</h3>
<p>.customBg<br />
{<br />
	backgroundSize: &#8220;100%&#8221;;<br />
	backgroundImage: ClassReference(&#8220;skins.CustomBG&#8221;);<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/flex-custom-skins/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flex 中可能导致内存泄露的地方</title>
		<link>http://foxling.org/as-flex-air/flex-memory-leak/</link>
		<comments>http://foxling.org/as-flex-air/flex-memory-leak/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 17:49:11 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Memory Leak]]></category>
		<category><![CDATA[内存泄露]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=392</guid>
		<description><![CDATA[收集了不少的会导致内存泄露的情况：
事件监听：
对父级对象加了监听函数，会造成内存泄露，例：

override protected function mouseDownHandler(…):void {
systemManager.addEventListener(“mouseUp”, mouseUpHandler);
......
}

解决：
在销毁对象的时候，remove掉这些监听，虽然弱引用也可以避免这些问题，但自己掌控感觉更好。
但以下几种情况不会造成内存泄露：

弱引用：someObject.addEventListener(MouseClick.CLICK, handlerFunction, false, 0, true);
对自己的引用：this.addEventListener(MouseClick.CLICK, handlerFunction);
子对象的引用：

private var childObject:UIComponent = new UIComponent;
addChild(childObject);
childObject.addEventListener(MouseEvent.CLICK, clickHandler);



总之&#8230;有addEventListener，就removeEventListener一下吧，要为自己做的事负责~哈哈
清除引用
remove掉子对象后并不会删除该对象，他还保留在内存中，应该将引用设置为null

removeChildren(obj);
obj = null;


静态成员
Class （或MXML）中有：
public static var _eventService : MyService=new MyService();
解决：在dispose时，需要设置：
_eventService =null;
module (未解决)
moduleLoader unloadModule后
ModuleInfo 并不会被GC.
Garbage Collection in a MultiCore Modular Pipes Application
这篇文章介绍了一种GC策略，感觉对于ModuleInfo 的GC无效。
(未尝试、未遇到)
CSS样式
module 中如果使用了shell的CSS定义或是&#60;mx:Style&#62; 这样的定义，那么这个module将不能GC.
弹出的窗口应该是同样的结果.
解决方法，使用动态CSS文件
module init中
StyleManager.loadStyleDeclarations("css/myStyle.swf");
module dispose中
StyleManager.unloadStyleDeclarations("css/myStyle.swf");
TextInput/Textarea(未解决)
如果module中有window使用了TextInput/Textarea控件，不点击没有问题，只要点上去，那么很遗憾了，module和所在窗体将不能被GC.
这个BUG非常严重，目前还没有解决方法。
memory leak when using TextInput and TextArea when click the keyboard 这里面附加的解决方法无效。
通过profiler分析，应该和Focusmanager有关，只有一点击就不会释放。
CursorManager.setCursor
使用了
cursorID = CursorManager.setCursor(iconClosed);
dispose时要
CursorManager.removeCursor(cursorID); [...]]]></description>
			<content:encoded><![CDATA[<p>收集了不少的会导致内存泄露的情况：</p>
<h3>事件监听：</h3>
<p>对父级对象加了监听函数，会造成内存泄露，例：</p>
<pre>
override protected function mouseDownHandler(…):void {
systemManager.addEventListener(“mouseUp”, mouseUpHandler);
......
}
</pre>
<p>解决：<br />
在销毁对象的时候，remove掉这些监听，虽然弱引用也可以避免这些问题，但自己掌控感觉更好。</p>
<p>但以下几种情况不会造成内存泄露：</p>
<ul>
<li>弱引用：<code>someObject.addEventListener(MouseClick.CLICK, handlerFunction, false, 0, true);</code></li>
<li>对自己的引用：<code>this.addEventListener(MouseClick.CLICK, handlerFunction);</code></li>
<li>子对象的引用：
<pre>
private var childObject:UIComponent = new UIComponent;
addChild(childObject);
childObject.addEventListener(MouseEvent.CLICK, clickHandler);
</pre>
</li>
</ul>
<p>总之&#8230;有addEventListener，就removeEventListener一下吧，要为自己做的事负责~哈哈</p>
<h3>清除引用</h3>
<p>remove掉子对象后并不会删除该对象，他还保留在内存中，应该将引用设置为null</p>
<pre>
removeChildren(obj);
obj = null;
</pre>
<p><span id="more-392"></span></p>
<h3>静态成员</h3>
<p>Class （或MXML）中有：</p>
<pre>public static var _eventService : MyService=new MyService();</pre>
<p>解决：在dispose时，需要设置：</p>
<pre>_eventService =null;</pre>
<h3>module (未解决)</h3>
<p>moduleLoader unloadModule后<br />
ModuleInfo 并不会被GC.<br />
<a href="http://www.nutrixinteractive.com/blog/?p=132">Garbage Collection in a MultiCore Modular Pipes Application</a><br />
这篇文章介绍了一种GC策略，感觉对于ModuleInfo 的GC无效。<br />
(未尝试、未遇到)</p>
<h3>CSS样式</h3>
<p>module 中如果使用了shell的CSS定义或是&lt;mx:Style&gt; 这样的定义，那么这个module将不能GC.<br />
弹出的窗口应该是同样的结果.<br />
解决方法，使用动态CSS文件<br />
module init中</p>
<pre>StyleManager.loadStyleDeclarations("css/myStyle.swf");</pre>
<p>module dispose中</p>
<pre>StyleManager.unloadStyleDeclarations("css/myStyle.swf");</pre>
<h3>TextInput/Textarea(未解决)</h3>
<p>如果module中有window使用了TextInput/Textarea控件，不点击没有问题，只要点上去，那么很遗憾了，module和所在窗体将不能被GC.<br />
这个BUG非常严重，目前还没有解决方法。<br />
<a href="http://bugs.adobe.com/jira/browse/SDK-14781">memory leak when using TextInput and TextArea when click the keyboard</a> 这里面附加的解决方法无效。<br />
通过profiler分析，应该和Focusmanager有关，只有一点击就不会释放。</p>
<h3>CursorManager.setCursor</h3>
<p>使用了</p>
<pre>cursorID = CursorManager.setCursor(iconClosed);</pre>
<p>dispose时要</p>
<pre>CursorManager.removeCursor(cursorID); </pre>
<h3>Bitmap</h3>
<p>如果使用Bitmap，结束时需要调用其dispose方法，否则内存消耗巨大。<br />
另外，BitmapData是可以共享使用的，多个Bitmap可以使用同一BitmapData，节省不少内存。</p>
<pre>
var bmp:Bitmap  =new Bitmap();

........

if (bmp.bitmapData!=null) {
    bmp.bitmapData.dispose();
}
</pre>
<h3>Image</h3>
<p>包含了Image对象时，在removeChildren时会造成不能释放（测试多次，结果不一，建议还是做如下处理）。<br />
解决：</p>
<pre>
img.source = null;
this.removeChild(img);
img = null;
</pre>
<h3>Loader、SWFLoader、声音、视频、Effect等&#8230;</h3>
<ul>
<li>如果是加载SWF文件，先停止播放。</li>
<li>停止声音的播放</li>
<li>停止正在播放的影片剪辑(Movieclip)</li>
<li>关闭任何连接的网络对象，例如Loader正在加载，要先close。</li>
<li>取消对摄像头或者麦克风的引用</li>
<li>取消事件监听器</li>
<li>停止任何正在运行的定时器，clearInterval()</li>
<li>停止任何Timer对象，timer.stop()</li>
<li>停止正在播放的效果(Effect)</li>
</ul>
<h3>其他</h3>
<p>binding也疑似有memory leak 问题。</p>
<p>引用以及内存泄露相关博文和资料：<br />
<a href="http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html">http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html</a><br />
<a href="http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/">http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/</a><br />
<a href="http://www.cnblogs.com/janyou/archive/2008/11/25/1340753.html">http://www.cnblogs.com/janyou/archive/2008/11/25/1340753.html</a><br />
<a href="http://www.dreamingwell.com/articles/archives/2008/05/understanding_m.php">http://www.dreamingwell.com/articles/archives/2008/05/understanding_m.php</a></p>
<p>总结：由于之前Flash一直是在网页上使用，一般网页都是看完就关掉的，估计Adobe在内存回收这块也没有下太大的功夫，现在AIR的出现使得内存管理也相当重要了，并且，AIR本身对内存的消耗就相当大，一个没有任何内容的初始创建的AIR程序，就得占掉10-20M+的内存&#8230;AIR还需改善.</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/flex-memory-leak/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AIR日志记录方法</title>
		<link>http://foxling.org/as-flex-air/log-air/</link>
		<comments>http://foxling.org/as-flex-air/log-air/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 14:52:27 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=387</guid>
		<description><![CDATA[
public static function log(txt:String):void
{
    var date:Date = new Date();
    var fileName:String;

    fileName = "errlog-" + date.getFullYear().toString() + (date.getMonth()+1).toString() + date.getDate() + ".txt";

    var file:File = File.applicationStorageDirectory.resolvePath(fileName);
    var fs:FileStream = new FileStream();

    txt = "\n\n--------" + date.toString() + [...]]]></description>
			<content:encoded><![CDATA[<pre>
public static function log(txt:String):void
{
    var date:Date = new Date();
    var fileName:String;

    fileName = "errlog-" + date.getFullYear().toString() + (date.getMonth()+1).toString() + date.getDate() + ".txt";

    var file:File = File.applicationStorageDirectory.resolvePath(fileName);
    var fs:FileStream = new FileStream();

    txt = "\n\n--------" + date.toString() + "----------\n" + txt

    fs.open(file,FileMode.APPEND);
    fs.writeUTFBytes(txt);
    fs.close();
}
</pre>
<p>废话不多说，直接看代码，将需要记录的日志，比如出错信息记录到程序数据文件夹，以日期命名，便于追踪信息。</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/log-air/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用SWFObject插入Flash在IE下导致stageWidth为0的解决方法</title>
		<link>http://foxling.org/as-flex-air/swfobject-bug-at-ie/</link>
		<comments>http://foxling.org/as-flex-air/swfobject-bug-at-ie/#comments</comments>
		<pubDate>Sat, 23 May 2009 18:20:07 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SWFObject]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=378</guid>
		<description><![CDATA[SWFObject
SWFObject是一个用于在HTML中方面插入Adobe Flash媒体资源（*.swf文件）的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外，它能够避免您的 HTML、XHTML中出现object、embed等非标准标签，从而符合更加标准。 
SWFObject在IE下的BUG
如果Flash里绘制的对象的宽高是自适应Flash的宽高的，那么，使用SWFObject来插入Flash在IE会导致一个问题，当这个Flash被缓存后，也就是第二次访问该页面时，在该Swf文件被加载时，获取到的stage.stageWidth和stage.stageHeight为0，绘制的对象也就看不到了。

在Flash里监听resize事件，找出解决方法
如下(如果加载较慢就先等等吧~)：


swfobject.embedSWF("/examples/autosizeexample/autosizeexample.swf", "autosizeExample", "300", "300", "9.0.0", "/wp-content/res/expressInstall.swf");

用IE的话，会看到5行，有两次resize事件，这也就导致了Flash在加载的时候绘制对象错误(宽和高为0)：
数字是stage.stageWidth和stage.stageHeight

info
resize
0 x 0
resize
300 x 300
如果用Firefox等浏览器，只输出两行文字，没有resize事件：
info
300 x 300
AS里的解决方案
通过监听resize事件，当stage.stageWidth和stage.stageHeight大于0时再进行初始化

package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;

    public class AutoSizeExample extends Sprite
    {
   [...]]]></description>
			<content:encoded><![CDATA[<h3>SWFObject</h3>
<p><a href="http://code.google.com/p/swfobject/">SWFObject</a>是一个用于在HTML中方面插入Adobe Flash媒体资源（*.swf文件）的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外，它能够避免您的 HTML、XHTML中出现object、embed等非标准标签，从而符合更加标准。 </p>
<h3>SWFObject在IE下的BUG</h3>
<p>如果Flash里绘制的对象的宽高是自适应Flash的宽高的，那么，使用SWFObject来插入Flash在IE会导致一个问题，<strong>当这个Flash被缓存后，也就是第二次访问该页面时</strong>，在该Swf文件被加载时，获取到的stage.stageWidth和stage.stageHeight为0，绘制的对象也就看不到了。</p>
<p><span id="more-378"></span></p>
<h3>在Flash里监听resize事件，找出解决方法</h3>
<p>如下(如果加载较慢就先等等吧~)：</p>
<div style="padding:10px;border:1px dashed #CCC;">
<div id="autosizeExample"><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></div>
<p><script type="text/javascript">swfobject.embedSWF("/examples/autosizeexample/autosizeexample.swf", "autosizeExample", "300", "300", "9.0.0", "/wp-content/res/expressInstall.swf");</script>
</div>
<p>用IE的话，会看到5行，有两次resize事件，这也就导致了Flash在加载的时候绘制对象错误(宽和高为0)：<br />
数字是stage.stageWidth和stage.stageHeight</p>
<blockquote><p>
info<br />
resize<br />
0 x 0<br />
resize<br />
300 x 300</p></blockquote>
<p>如果用Firefox等浏览器，只输出两行文字，没有resize事件：</p>
<blockquote><p>info<br />
300 x 300</p></blockquote>
<h3>AS里的解决方案</h3>
<p>通过监听resize事件，当stage.stageWidth和stage.stageHeight大于0时再进行初始化</p>
<pre>
package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;

    public class AutoSizeExample extends Sprite
    {
        private var txt:TextField;
        public function AutoSizeExample()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            txt = new TextField();
            txt.multiline = true;
            txt.wordWrap = true;
            txt.text = "info\n";
            addChild(txt);

            if (stage.stageWidth>0 &#038;&#038; stage.stageHeight>0){
                createChild();
            }else{
                stage.addEventListener(Event.RESIZE,onResize);
            }
        }

        private function onResize(e:Event):void
        {
            if (stage.stageWidth>0 &#038;&#038; stage.stageHeight>0){
                stage.removeEventListener(Event.RESIZE,onResize); //删除事件监听
                createChild();
            }
            //否则继续监听事件，直到stage.stageWidth和stage.stageHeight大于0时才初始化
        }

        private function createChild():void
        {
            //进行初始化操作，创建各对象
            //.......................
            var w:Number = stage.stageWidth;
            var h:Number = stage.stageHeight;

            txt.appendText(w + " x " + h + "\n");
        }

    }
}
</pre>
<h3>SWFObject.js里的解决方案</h3>
<p>在swfobject.js里找到函数function createSWF(attObj, parObj, id)<br />
里面针对winIE的处理方法是：<code>el.outerHTML = '&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '&gt;' + par + '&lt;/object&gt;';</code><br />
看了一下Adobe自己的AC_OETags.js，他是用document.write方法直接写入，没有这个问题；<br />
直接写静态html(object)没有这种问题；<br />
直接访问<a href="/examples/autosizeexample/autosizeexample.swf">这个flash的地址</a>，也没有这种问题。<br />
至于el.outerHTML的方式为什么会导致这种问题，还没有深究，暂时还不太清楚是什么原因导致的~</p>
<p>待续~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/swfobject-bug-at-ie/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>读书笔记：ActionScript3设计模式中的单件模式</title>
		<link>http://foxling.org/as-flex-air/actionscript-3-singletion/</link>
		<comments>http://foxling.org/as-flex-air/actionscript-3-singletion/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 16:43:14 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=371</guid>
		<description><![CDATA[单件模式用于限制类的实例化次数，使你在系统的任何位置都能访问到同一个实例；达到节省资源，管理方便的效果。
单件模式的应用
从一个XML文件加载程序的基本配置信息，只需要在Flash初始化的时候或者Air程序启动的时候执行一次即可，并且，在程序的整个运行阶段都只需要一个实例，并不需要建多个实例或者读取多次XML。
例如：用一个xml文件保存AIR应用程序配置信息，里面包含窗口起始位置，窗口的宽高。

&#60;setting&#62;
	&#60;window x="100" y="100" width="300" height="400"&#62;
&#60;/setting&#62;

单件模式的实现

package cn.foxling.test
{
	public class Setting
	{
		private static var _instance:Setting;

		public function Setting(enforcer:SingletionEnforcer)
		{
		}

		public static function getInstance():Setting
		{
			if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer());
			return Setting._instance;
		}

	}
}

class SingletionEnforcer {}


单件模式必须具体的3个元素

私有静态属性，用于存储唯一实例
private static var _instance:Setting;
公共静态方法，用于获取这个唯一实例，并且，在第一次执行时，创建这个唯一的实例
public static function getInstance():Setting
为了限制类的多次实例化，通常使用私有构造函数，由于在AS3里面不支持私有构造函数，于是通过在一个文件中添加多个类的办法创建一个“私有”类(SingletionEnforcer类只能被该文件中的主类所访问)。

继续实现这个Setting类的功能
需要从XML文件加载程序的基本配置信息，给这个Setting类增加一些功能，比如读取配置，保存配置。
具体代码没有一一实现，把结构写了出来~

package cn.foxling.test
{
	import flash.events.EventDispatcher;

	public class Setting extends EventDispatcher
	{
		private static var _instance:Setting;

		private var _x:Number;
		private var _y:Number;
		private var _width:Number;
		private var _height:Number;

		public function Setting(enforcer:SingletionEnforcer)
		{}

		public static function getInstance():Setting
		{
			if [...]]]></description>
			<content:encoded><![CDATA[<p>单件模式用于限制类的实例化次数，使你在系统的任何位置都能访问到同一个实例；达到节省资源，管理方便的效果。</p>
<h3>单件模式的应用</h3>
<p>从一个XML文件加载程序的基本配置信息，只需要在Flash初始化的时候或者Air程序启动的时候执行一次即可，并且，在程序的整个运行阶段都只需要一个实例，并不需要建多个实例或者读取多次XML。<br />
例如：用一个xml文件保存AIR应用程序配置信息，里面包含窗口起始位置，窗口的宽高。</p>
<pre>
&lt;setting&gt;
	&lt;window x="100" y="100" width="300" height="400"&gt;
&lt;/setting&gt;
</pre>
<h3>单件模式的实现</h3>
<pre>
package cn.foxling.test
{
	public class Setting
	{
		private static var _instance:Setting;

		public function Setting(enforcer:SingletionEnforcer)
		{
		}

		public static function getInstance():Setting
		{
			if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer());
			return Setting._instance;
		}

	}
}

class SingletionEnforcer {}
</pre>
<p><span id="more-371"></span></p>
<h3>单件模式必须具体的3个元素</h3>
<ul>
<li>私有静态属性，用于存储唯一实例<br />
<code>private static var _instance:Setting;</code></li>
<li>公共静态方法，用于获取这个唯一实例，并且，在第一次执行时，创建这个唯一的实例<br />
<code>public static function getInstance():Setting</code></li>
<li>为了限制类的多次实例化，通常使用私有构造函数，由于在AS3里面不支持私有构造函数，于是通过在一个文件中添加多个类的办法创建一个“私有”类(SingletionEnforcer类只能被该文件中的主类所访问)。</li>
</ul>
<h3>继续实现这个Setting类的功能</h3>
<p>需要从XML文件加载程序的基本配置信息，给这个Setting类增加一些功能，比如读取配置，保存配置。<br />
具体代码没有一一实现，把结构写了出来~</p>
<pre>
package cn.foxling.test
{
	import flash.events.EventDispatcher;

	public class Setting extends EventDispatcher
	{
		private static var _instance:Setting;

		private var _x:Number;
		private var _y:Number;
		private var _width:Number;
		private var _height:Number;

		public function Setting(enforcer:SingletionEnforcer)
		{}

		public static function getInstance():Setting
		{
			if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer());
			return Setting._instance;
		}

		public function loadXML():void
		{
			//通过URLLoader读取xml信息
			//派发加载成功的事件
		}

		public function save():void
		{
			//将_x,_y,_width,_height格式化成xml
			//并写入本地文件
			//派发保存成功的事件
		}

		//================================
		//为_x,_y,_width,_height写setter、getter方法
		//避免对_x,_y,_width,_height设置非法值
		//================================

	}
}

class SingletionEnforcer {}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/actionscript-3-singletion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>魔嘀新版本(更新1.1版本)</title>
		<link>http://foxling.org/as-flex-air/modi-new/</link>
		<comments>http://foxling.org/as-flex-air/modi-new/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 05:03:26 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[Air应用]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[魔嘀]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=354</guid>
		<description><![CDATA[
经过一段时间的辛苦奋战，魔嘀终于发布1.0了，所有的代码全部重写，增加了一些常用的功能，并请@ZK设计了全新的UI，现在的魔嘀帅多了。
魔嘀下载页面：http://app.foxling.cn/modi/
但现在还有许多细节都需要优化，时间有限，只能一步一步地更新了~
如果发现了什么BUG，或有什么好的建议，在这里留言吧，不一定一一回复，但我都会整理记录起来的，并且在后面的版本里陆续实现，欢迎在嘀咕网跟随我，一起交流。
AIR应用的通病，内存消耗较大，所以，建议平时不用时最小化吧，最小化后内存占用会比较少，8M-12M左右，我也在不断地优化代码，寻找BUG，使魔嘀的内存占用量能维持在一个比较稳定的水平。

版本更新

1.0 (2009-04-10)

]]></description>
			<content:encoded><![CDATA[<p><a href="http://app.foxling.cn/modi/"><img src="http://foxling.cn/wp-content/uploads/2009/04/modilogo.png" alt="魔嘀Logo" title="魔嘀Logo" width="316" height="128" class="alignright size-full wp-image-355" /></a><br />
经过一段时间的辛苦奋战，魔嘀终于发布1.0了，所有的代码全部重写，增加了一些常用的功能，并请<a href="http://digu.com/tuotuo1020" target="_blank">@ZK</a>设计了全新的UI，现在的魔嘀帅多了。<br />
魔嘀下载页面：<a href="http://app.foxling.cn/modi/" target="_blank">http://app.foxling.cn/modi/</a><br />
但现在还有许多细节都需要优化，时间有限，只能一步一步地更新了~<br />
如果发现了什么BUG，或有什么好的建议，在这里留言吧，不一定一一回复，但我都会整理记录起来的，并且在后面的版本里陆续实现，欢迎在嘀咕网<a href="http://digu.com/foxling" target="_blank">跟随我</a>，一起交流。<br />
AIR应用的通病，内存消耗较大，所以，建议平时不用时最小化吧，最小化后内存占用会比较少，8M-12M左右，我也在不断地优化代码，寻找BUG，使魔嘀的内存占用量能维持在一个比较稳定的水平。</p>
<p><img src="http://foxling.cn/wp-content/uploads/2009/04/modi.png" alt="魔嘀新界面" title="魔嘀新界面" width="429" height="473" class="aligncenter size-full wp-image-357" /></p>
<h3>版本更新</h3>
<ul>
<li>1.0 (2009-04-10)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/modi-new/feed/</wfw:commentRss>
		<slash:comments>94</slash:comments>
		</item>
		<item>
		<title>Flex3中的元标签</title>
		<link>http://foxling.org/as-flex-air/flex-3-metadata-tag/</link>
		<comments>http://foxling.org/as-flex-air/flex-3-metadata-tag/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 07:05:26 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[元数据标签]]></category>
		<category><![CDATA[元标签]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=257</guid>
		<description><![CDATA[元数据标签是一种特殊的标签，它在代码中的作用就是向编译器提供如何编译程序的信息。
实际上，这些标签并没有被编译到生成的SWF文件中，而只是告诉编译器如何生成SWF 文件。
Flex中的元标签列表如下：



标签
描述




[ArrayElementType("elementType")]
在数组中定义所有允许的数据类型。


[Bindable][Bindable(event="eventname")]
声明一个属性可以在代码中使用数据绑定表达式，Bindable可以用来绑定简单数据类型、类、复杂数据类型以及函数。


[DefaultProperty("propertyName")]
定义组件在MXML中使用时的默认属性的名称。


[Deprecated]
标识一个类或类的元素是不推荐使用的，这样编译器能认出他并在被调用时给出一个警告信息。


[Effect]
定义MXML的特效属性名称。


[Embed]
在编译时导入 JPED,PNG,SVG 或 SWF文件。也会导入SWC文件的图片资源。他的功能等同于MXML中的 @Embed 语法。


[Event]
定义MXML的事件属性的名称和类型。


[Exclude]
使 Flex Builder 的标签检查器忽略类元素。语法类似 [Exclude(name="label",    kind="property")]


[ExcludeClass]
是 Flex Builder 标签检查器忽略类。这相当于ASDoc中的 @private 标签。


[IconFile]
定义一个图标文件，使组件在Adobe Flex Builder的插入面板中以该图标显示。


[Inspectable]
定义一个属性的列表，供组件使用者在 Flex    Builder 的的属性提示和标签检查中使用。同时也定义了属性的可用值。


[InstanceType]
指定了 IDeferredInstance 中的，属性接受的数据类型。


[NonCommittingChangeEvent]
定义一个事件过渡触发器。


[RemoteClass]
把一个ActionScript对象映射到Java对象。


[Style]
为组件的样式属性定义一个MXML标签属性。


[Transient]
当一个 ActionScript 对象被映射到Java对象后，被该标签标识的属性，会从发送到服务端的数据中忽略掉。




[ArrayElementType]
使用ArrayElementType元数据标签可以让你定义数组元素的数据类型。

[ArrayElementType("Number")]
public var arr:Array;

事实上，MXML编译器只针对mxml代码中的ArrayElementType元数据标签的用法进行合理性检查。而对actionscript代码中的用法不进行合理性检查，通过试验可以知道，ArrayElementType标签此时是无效的。
也就是说，上面的声明是无效的~，只有在MXML里才能正确检查，你可以测试一下：

arr.push(1);
arr.push("name"); //并不会报错

Bindable绑定数据的例子
申明变量txt可绑定后，当txt值改变，绑定txt的Label显示的内容也会跟着改变。

&#60;?xml version="1.0" encoding="utf-8"?&#62;
&#60;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init()"&#62;
	&#60;mx:Script&#62;
		&#60;![CDATA[
			[Bindable]
			private var txt:String = "Hello world.";

			private function init():void
			{
          [...]]]></description>
			<content:encoded><![CDATA[<p>元数据标签是一种特殊的标签，它在代码中的作用就是向编译器提供如何编译程序的信息。<br />
实际上，这些标签并没有被编译到生成的SWF文件中，而只是告诉编译器如何生成SWF 文件。</p>
<p>Flex中的元标签列表如下：</p>
<table>
<thead>
<tr>
<th>标签</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>[ArrayElementType("elementType")]</td>
<td>在数组中定义所有允许的数据类型。</td>
</tr>
<tr>
<td>[Bindable]<br />[Bindable(event="eventname")]</td>
<td>声明一个属性可以在代码中使用数据绑定表达式，Bindable可以用来绑定简单数据类型、类、复杂数据类型以及函数。</td>
</tr>
<tr>
<td>[DefaultProperty("propertyName")]</td>
<td>定义组件在MXML中使用时的默认属性的名称。</td>
</tr>
<tr>
<td>[Deprecated]</td>
<td>标识一个类或类的元素是不推荐使用的，这样编译器能认出他并在被调用时给出一个警告信息。</td>
</tr>
<tr>
<td>[Effect]</td>
<td>定义MXML的特效属性名称。</td>
</tr>
<tr>
<td>[Embed]</td>
<td>在编译时导入 JPED,PNG,SVG 或 SWF文件。也会导入SWC文件的图片资源。他的功能等同于MXML中的 @Embed 语法。</td>
</tr>
<tr>
<td>[Event]</td>
<td>定义MXML的事件属性的名称和类型。</td>
</tr>
<tr>
<td>[Exclude]</td>
<td>使 Flex Builder 的标签检查器忽略类元素。语法类似 [Exclude(name="label",    kind="property")]</td>
</tr>
<tr>
<td>[ExcludeClass]</td>
<td>是 Flex Builder 标签检查器忽略类。这相当于ASDoc中的 @private 标签。</td>
</tr>
<tr>
<td>[IconFile]</td>
<td>定义一个图标文件，使组件在Adobe Flex Builder的插入面板中以该图标显示。</td>
</tr>
<tr>
<td>[Inspectable]</td>
<td>定义一个属性的列表，供组件使用者在 Flex    Builder 的的属性提示和标签检查中使用。同时也定义了属性的可用值。</td>
</tr>
<tr>
<td>[InstanceType]</td>
<td>指定了 IDeferredInstance 中的，属性接受的数据类型。</td>
</tr>
<tr>
<td>[NonCommittingChangeEvent]</td>
<td>定义一个事件过渡触发器。</td>
</tr>
<tr>
<td>[RemoteClass]</td>
<td>把一个ActionScript对象映射到Java对象。</td>
</tr>
<tr>
<td>[Style]</td>
<td>为组件的样式属性定义一个MXML标签属性。</td>
</tr>
<tr>
<td>[Transient]</td>
<td>当一个 ActionScript 对象被映射到Java对象后，被该标签标识的属性，会从发送到服务端的数据中忽略掉。</td>
</tr>
</tbody>
</table>
<p><span id="more-257"></span></p>
<h3>[ArrayElementType]</h3>
<p>使用ArrayElementType元数据标签可以让你定义数组元素的数据类型。</p>
<pre>
[ArrayElementType("Number")]
public var arr:Array;
</pre>
<p><em>事实上，MXML编译器只针对mxml代码中的ArrayElementType元数据标签的用法进行合理性检查。而对actionscript代码中的用法不进行合理性检查，通过试验可以知道，ArrayElementType标签此时是无效的。</em></p>
<p>也就是说，上面的声明是无效的~，只有在MXML里才能正确检查，你可以测试一下：</p>
<pre>
arr.push(1);
arr.push("name"); //并不会报错
</pre>
<h3>Bindable绑定数据的例子</h3>
<p>申明变量txt可绑定后，当txt值改变，绑定txt的Label显示的内容也会跟着改变。</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="init()"&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			[Bindable]
			private var txt:String = "Hello world.";

			private function init():void
			{
                            changeBtn.addEventListener(MouseEvent.CLICK,
                             function():void{txt="Hello World,Hello World."});
			}
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:Label x="10" y="10" text="{txt}"/&gt;
	&lt;mx:Button x="10" y="36" label="更新数据" id="changeBtn"/&gt;
&lt;/mx:Application&gt;
</pre>
<h3>[DefaultProperty("propertyName")]</h3>
<p>DefaultProperty元数据标签用来将一个单一属性设定为某个类的默认属性。它允许在一个容器标签内设定属性，而不用定义属性的名字。</p>
<pre>
package myComponents
{
    import mx.controls.TextArea;

    // 定义一个默认的属性defaultText，下例中的Hello将做为defaultText的值。
    [DefaultProperty("defaultText")]

    public class TextAreaDefaultProp extends TextArea {

        public function TextAreaDefaultProp()
        {
            super();
        }       

        // Define a setter method to set the text property
        // to the value of the default property.
        public function set defaultText(value:String):void {
            if (value!=null)
            text=value;
        }

        public function get defaultText():String {
            return text;
        }
    }
}
</pre>
<p>在MXML里使用该组件：</p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:MyComp="myComponents.*"&gt;
    &lt;MyComp:TextAreaDefaultProp&gt;Hello&lt;/MyComp:TextAreaDefaultProp&gt;
&lt;/mx:Application&gt;
</pre>
<p>更多信息以及例子请参阅：<a href="http://livedocs.adobe.com/flex/3/html/metadata_3.html">http://livedocs.adobe.com/flex/3/html/metadata_3.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/flex-3-metadata-tag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用Flash按钮解决跨浏览器使用剪贴板的复制功能</title>
		<link>http://foxling.org/as-flex-air/as3-button-setclipboard/</link>
		<comments>http://foxling.org/as-flex-air/as3-button-setclipboard/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 14:19:34 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[剪贴板]]></category>
		<category><![CDATA[复制粘贴]]></category>

		<guid isPermaLink="false">http://wp.foxling.cn/as-flex-air/as3-button-setclipboard/</guid>
		<description><![CDATA[以前有一个比较完美解决网页上复制按钮的方法，是通过JS调用SWF文件，让SWF文件做为一个中介来完成复制的功能（请看跨浏览器使用剪贴板），但最Adobe 发布了 Flash Player 10，一切就变了~，这个版本的 Flash Player 引入了不少新的安全特性，其中包括了对于一些敏感操作需要用户介入的内容。
新的 Flash Player 10 中，需要上载或下载数据、操作系统剪贴板的操作等都需要用户参与，也就是说要实现类似的&#8220;复制&#8221;功能，必须要让用户点击指定的按钮或设置快捷键才可以解决。这也就意味着之前可以自动操作剪贴板的 Flash 脚本都已失效了。于是乎，开心网啊，校内啊，他们的复制按钮都失效啦，提示复制成功，粘贴后却还是之前的内容。
像Google相册、YouTube的链接都是点击选中，需要用户Ctrl+C自行复制的，这也是一种解决方案，好过开心网那种提示成功却没成功~~
既然操作剪贴板的功能需要用户参与，那还是有解决方案的，做一个Flash的按钮让用户点击复制~~~

演示如下：

代码：

&#60;embed width=&#34;62&#34; height=&#34;24&#34; align=&#34;middle&#34;
flashvars=&#34;txt=http://www.foxling.cn&#34;
src=&#34;/examples/as3/Copy/Copy.swf&#34;
quality=&#34;high&#34; wmode=&#34;transparent&#34;
allowscriptaccess=&#34;sameDomain&#34;
pluginspage=&#34;http://www.adobe.com/go/getflashplayer&#34;
type=&#34;application/x-shockwave-flash&#34;&#62;

把需要复制的内容，通过FlashVars传给Flash，然后通过System类的setClipboard方法可以将需要的内容复制到剪贴板，flash.system.System是一个静态类，包含与发生在用户计算机上的某些操作相关的属性，如具有共享对象的操作、摄像头和麦克风的本地设置和剪贴板的使用。访问剪贴板的数据是被禁止的，所以，没有getClipboard的方法：

private function copy(e:MouseEvent):void
{
    var txt:String = LoaderInfo(root.loaderInfo).parameters.txt;
    System.setClipboard(txt);
    cr&#101;ateText(&#34;已复制&#34;);
}

在AS3中，取得FlashVars参数的方法与以前不一样了，AS3用parameters 属性替换了ActionScript 1.0 和 2.0 提供 SWF 文件参数作为主时间轴的技术。
parameters是LoaderInfo对象的一个属性，对于加载的SWF等元素可以通过其Loader对像的contentLoaderInfo属性访问，由于SWF文件的主类的实例没有Loader对象，因此loaderInfo属性是访问SWF文件主类实例的LoaderInfo的唯一方法。
如果是Flex项目，可以通过Application.application.parameters.varname来访问FlashVars里的varname参数。
全部代码如下：

package {
	import flash.display.GradientType;
	import flash.display.LineScaleMode;
	import flash.display.LoaderInfo;
	import flash.display.Shape;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.system.System;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;

	[SWF(width=&#34;62&#34;, [...]]]></description>
			<content:encoded><![CDATA[<p>以前有一个比较完美解决网页上复制按钮的方法，是通过JS调用SWF文件，让SWF文件做为一个中介来完成复制的功能（请看<a target="_blank" href="http://realazy.org/blog/2008/09/01/using-clipboard-crossbrowsers/">跨浏览器使用剪贴板</a>），但最Adobe 发布了 Flash Player 10，一切就变了~，这个版本的 Flash Player 引入了不少新的安全特性，其中包括了对于一些敏感操作需要用户介入的内容。</p>
<p>新的 Flash Player 10 中，需要上载或下载数据、操作系统剪贴板的操作等都需要用户参与，也就是说要实现类似的&ldquo;复制&rdquo;功能，必须要让用户点击指定的按钮或设置快捷键才可以解决。这也就意味着之前可以自动操作剪贴板的 Flash 脚本都已失效了。于是乎，开心网啊，校内啊，他们的复制按钮都失效啦，提示复制成功，粘贴后却还是之前的内容。</p>
<p>像Google相册、YouTube的链接都是点击选中，需要用户Ctrl+C自行复制的，这也是一种解决方案，好过开心网那种提示成功却没成功~~</p>
<p>既然操作剪贴板的功能需要用户参与，那还是有解决方案的，做一个Flash的按钮让用户点击复制~~~</p>
<p><span id="more-83"></span></p>
<p>演示如下：</p>
<p style="text-align: center;"><embed width="62" height="24" align="middle" flashvars="txt=http://www.foxling.cn" src="/examples/as3/Copy/Copy.swf" quality="high" wmode="transparent" allowscriptaccess="sameDomain" pluginspage="http://www.adobe.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></p>
<p>代码：</p>
<pre>
&lt;embed width=&quot;62&quot; height=&quot;24&quot; align=&quot;middle&quot;
flashvars=&quot;txt=http://www.foxling.cn&quot;
src=&quot;/examples/as3/Copy/Copy.swf&quot;
quality=&quot;high&quot; wmode=&quot;transparent&quot;
allowscriptaccess=&quot;sameDomain&quot;
pluginspage=&quot;http://www.adobe.com/go/getflashplayer&quot;
type=&quot;application/x-shockwave-flash&quot;&gt;
</pre>
<p>把需要复制的内容，通过FlashVars传给Flash，然后通过System类的setClipboard方法可以将需要的内容复制到剪贴板，<a target="_blank" href="http://livedocs.adobe.com/flex/3_cn/langref/flash/system/System.html">flash.system.System</a>是一个静态类，包含与发生在用户计算机上的某些操作相关的属性，如具有共享对象的操作、摄像头和麦克风的本地设置和剪贴板的使用。访问剪贴板的数据是被禁止的，所以，没有getClipboard的方法：</p>
<pre>
private function copy(e:MouseEvent):void
{
    var txt:String = LoaderInfo(root.loaderInfo).parameters.txt;
    System.setClipboard(txt);
    cr&#101;ateText(&quot;已复制&quot;);
}
</pre>
<p>在AS3中，取得FlashVars参数的方法与以前不一样了，AS3用parameters 属性替换了ActionScript 1.0 和 2.0 提供 SWF 文件参数作为主时间轴的技术。</p>
<p><code>parameters</code>是<code>LoaderInfo</code>对象的一个属性，对于加载的SWF等元素可以通过其<code>Loader</code>对像的<code>contentLoaderInfo</code>属性访问，由于SWF文件的主类的实例没有<code>Loader</code>对象，因此<code>loaderInfo</code>属性是访问SWF文件主类实例的<code>LoaderInfo</code>的唯一方法。</p>
<p>如果是Flex项目，可以通过<code>Application.application.parameters.varname</code>来访问FlashVars里的varname参数。</p>
<p>全部代码如下：</p>
<pre>
package {
	import flash.display.GradientType;
	import flash.display.LineScaleMode;
	import flash.display.LoaderInfo;
	import flash.display.Shape;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.system.System;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;

	[SWF(width=&quot;62&quot;, height=&quot;24&quot;)]
	public class Copy extends Sprite
	{
		private var copyBtn:Sprite = new Sprite();
		private var btnText:TextField = new TextField();
		private const BTNWIDTH:Number = 60;
		private const BTNHEIGHT:Number = 22;

		public function Copy()
		{
			addChild(cr&#101;ateButton());
		}

		private function cr&#101;ateText(txt:String):void
		{
			var txtFormat:TextFormat = new TextFormat();
			txtFormat.align = TextFormatAlign.CENTER;
			btnText.text = txt;
			btnText.setTextFormat(txtFormat);
			btnText.width = BTNWIDTH;
			btnText.mouseEnabled = false;
			btnText.y = 2;
		}

		private function cr&#101;ateButton():Sprite
		{
			cr&#101;ateText(&quot;复制&quot;);

			var b:SimpleButton = new SimpleButton();
			b.upState = up();
			b.overState = over();
			b.downState = down();
			b.hitTestState = b.upState;
			b.addEventListener(MouseEvent.CLICK,copy);

			copyBtn.addChild(b);
			copyBtn.addChild(btnText);

			return copyBtn;
		}

		private function copy(e:MouseEvent):void
		{
			var txt:String = LoaderInfo(root.loaderInfo).parameters.txt;
			System.setClipboard(txt);
			cr&#101;ateText(&quot;已复制&quot;);
		}

		private function up():Shape
		{
			return cr&#101;ateShape([0xFFFFFF,0xCCCCCC]);
		}

		private function over():Shape
		{
			return cr&#101;ateShape([0xFFFFFF,0xFFFFCC]);
		}

		private function down():Shape
		{
			return cr&#101;ateShape([0xFFFFCC,0xFFFFFF]);
		}

		private function cr&#101;ateShape(color:Array):Shape
		{
			var s:Shape = new Shape();
			var m:Matrix = new Matrix();
			m.cr&#101;ateGradientBox(BTNWIDTH,BTNHEIGHT,-30,0,0);
			with(s.graphics){
				lineStyle(1,0xCCCCCC,1,false,LineScaleMode.NONE);
				beginGradientFill(GradientType.LINEAR,color,[1,1],[0,255],m);
				drawRoundRect(0,0,BTNWIDTH,BTNHEIGHT,5);
				endFill();
			}
			return s;
		}
	}
}
</pre>
<p>嗯~这个版本的缺点就是，要是用户禁用了Flash~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/as3-button-setclipboard/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
