<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Raven's Blog</title>
	<atom:link href="http://ravenzh.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ravenzh.wordpress.com</link>
	<description>ActionScript and FLex</description>
	<lastBuildDate>Wed, 22 Apr 2009 10:37:11 +0000</lastBuildDate>
	<language>zh</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ravenzh.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/5adb85d5ee54650fb73b6cd4d0aa644c?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Raven's Blog</title>
		<link>http://ravenzh.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ravenzh.wordpress.com/osd.xml" title="Raven&#039;s Blog" />
	<atom:link rel='hub' href='http://ravenzh.wordpress.com/?pushpress=hub'/>
		<item>
		<title>翻译(Collapsible Panel component)</title>
		<link>http://ravenzh.wordpress.com/2009/04/22/collapsible-panel-component/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/22/collapsible-panel-component/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 10:37:11 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[flex cookbook]]></category>
		<category><![CDATA[Translation]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[flex cookbook  dynamic class]]></category>
		<category><![CDATA[panel]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=98</guid>
		<description><![CDATA[参考地址:http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&#38;productId=2&#38;postId=14046 问题描述 创建可伸缩的Panel组件 解决方案 创建一个有2种state的组件。为避免&#8221;multiple sets of visual children&#8221;异常，使用[DefaultProperty]元标签定义名为&#8221;visualChildren&#8221;的私有数组属性。 说明 &#60;!&#8211;================Col lapsePanel.mxml================&#8211;&#62; &#60;?xml version="1.0" encoding="utf-8"?&#62; &#60;mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="addComponents()" backgroundColor="#ffffff" backgroundAlpha="0.5"&#62; &#60;mx:Metadata&#62; [DefaultProperty("visualChildren")] &#60;/mx:Metadata&#62; &#60;mx:Script&#62; &#60;![CDATA[ import mx.core.UIComponent; private var _components:Array; public function set visualChildren(value:Array):void { _components = value; } private function addComponents():void { if (container.numChildren != 0) container.removeAllChildren(); if (!_components) return ; for(var i:int = 0; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=98&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/22/collapsible-panel-component/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>

		<media:content url="http://ravenzh.files.wordpress.com/2009/04/opened1.png" medium="image">
			<media:title type="html">opened</media:title>
		</media:content>

		<media:content url="http://ravenzh.files.wordpress.com/2009/04/closed1.png" medium="image">
			<media:title type="html">closed</media:title>
		</media:content>
	</item>
		<item>
		<title>使用fb:swf所要注意的几点</title>
		<link>http://ravenzh.wordpress.com/2009/04/16/notes-to-use-fbswf/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/16/notes-to-use-fbswf/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 03:59:38 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[facbook application]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fb:swf]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[note]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=92</guid>
		<description><![CDATA[参考地址: http://wiki.developers.facebook.com/index.php/Fb:swf 1. 当前fb:swf标签使用Flash版本为9.0.115 2. 参数&#8221;flashvars&#8221;必须小写。Facebook只认小写的&#8221;flashvars&#8221;，不认&#8221;flashVars&#8221;. 3. 目前Facebook使用fb:swf标签，它会把flash包装在一个div中，所以尽管embed/object标签不是block-level(关于block_level,请点击这里)， 但如果连续的使用&#60;fb:swf&#62;标签，后来的flash内容会盖在前一个的上面。(官方的wiki是这样描述，事实上本人做实验时，却发现它们是纵向排列的，不知道算bug，还是FB已经改了) 4. Facebook把allowScriptAccess设置为none阻止Flash访问外部的JavaScript。如果要引用外部的js，需使用flash的localconnection和fb:fbjs-bridge标签。 5.通过以下步骤验证flash是不是由Facebook页面加载， a. 通过Application.application.parameters获取所有以fb-sig为前缀的参数(不包括fb-sig本身) b. 去掉fb-sig前缀 c. 将先前去掉前缀的参数组成param1=value1param2=value2param3=value形式的字符串，以参数名称排序(而不是参数的值)，注意不要添加“&#38;”符号。 d. 分别将c中得到字符串和fb-sig参数传给存储了app secret key的app server e. 在app server端，将app secret key加在c中得到字符串后面，于是得到param1=value1param2=value2param3=valueappsecretkey f. 使用MD5算法对e返回的字符串进行加密，返回MD5后的哈希值 g. 把f中得到的哈希值与fb_sig进行比较，相等说明flash是由Facebook页面加载的，不等说明是由非Facebook页面加载的。 例： &#60;fb:swf swfbgcolor=&#8221;000000&#8243; imgstyle=&#8221;border-width:3px; border-color:white;&#8221; swfsrc=&#8217;http://www.youtube.com/v/xxxxxxxxxx&#8217; imgsrc=&#8217;http://img.youtube.com/vi/xxxxxxxxxx/2.jpg&#8217; width=&#8217;340&#8242; height=&#8217;270&#8242; /&#62; 注意: width和height最好别用百分数，否则会出现很奇怪的现象。如果fb:swf标签用在profile页面imgsrc属性是必须(虽然它有默认值，但估计你不会想用它)，因为profile页面中的flash是不会自动播放，需要点击img后才播放。但在canvas页面中flash是自动播放,所以不需要imgsrc。 Posted in facbook application Tagged: application, facebook, fb:swf, flash, note<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=92&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/16/notes-to-use-fbswf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>
	</item>
		<item>
		<title>SHAPEVENT DAILY LOG</title>
		<link>http://ravenzh.wordpress.com/2009/04/14/shapevent-daily-log/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/14/shapevent-daily-log/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 09:24:37 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[new]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[draw]]></category>
		<category><![CDATA[graphic]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=90</guid>
		<description><![CDATA[SHAPEVENT DAILY LOG Cool stuff Posted in new Tagged: actionscript, cool, draw, graphic<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=90&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/14/shapevent-daily-log/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>
	</item>
		<item>
		<title>An external flash facebook website application(翻译)</title>
		<link>http://ravenzh.wordpress.com/2009/04/07/an-external-flash-facebook-website-application/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/07/an-external-flash-facebook-website-application/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 08:54:51 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[facbook application]]></category>
		<category><![CDATA[Translation]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fbml]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=62</guid>
		<description><![CDATA[参考地址： http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview_06.html 图5展示了基于Facebook用户的外部flash站点的结构。与之前最大的不同是Facebook server不在代理任何浏览器的请求。开发者需在client端使用Facebook API或Facebook Connect处理用户登录。如果使用Facebook API登录，用户将被定向到Facebook站点，在Facebook登录后返回到app站点上。如果使用Facebook Connect，用户将不需要到Facebook站点上去登录。 图5，外部flash站点结构 1. 用户在app站点请求app;浏览器向app server发送HTTP request请求HTML页面或server page。 2. app server返回包含了swf文件引用的HTML/JS页面。如果使用Facebook Connect，HTML页面中会包含一些Facebook Connect初始化所需的JavaScript代码。 3. 用户请求swf文件 4. app server返回swf文件 5. AS代码向Facebook发出异步的请求，一次一个或一组请求。第一次请求需要从Facebook server的得到authorization token，在用户通过Facebook Connect登录之后， ActionScript 3.0 Lib会生成一个引用标识，以便在后来的对Facebook api引用中使用。更多信息参考前面讨论过的Flash iFrame application。 6. Facebook server在app server请求时返回XML或JSON格式的数据， app处理数据。 7. 如果需要存储数据或与后台做其他交互，在AS代码中使用RPC(HTTP, web service或Flash Remoting requests)。速度最快并且代价也最小的方式是Flash Remoting requests， 它使用 Action Message Format (AMF)二进制格式在server和Flash之间传输数据。 8. 如果app server需要和Facebook继续交互，继续交互。 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=62&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/07/an-external-flash-facebook-website-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>

		<media:content url="http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview/fig05.jpg" medium="image" />
	</item>
		<item>
		<title>overriding-default-mx-managers(翻译)</title>
		<link>http://ravenzh.wordpress.com/2009/04/06/overriding-default-mx-managers/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/06/overriding-default-mx-managers/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 18:04:45 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[flex framework]]></category>
		<category><![CDATA[mx-manager]]></category>
		<category><![CDATA[popupmanager]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=52</guid>
		<description><![CDATA[参考地址： http://segfaultlabs.com/blog/post/overriding-default-mx-managers PROBLEM SUMMARY 在Flex/AIR程序中自定义各种managers ，比如改变PopUpManager弹出窗口的方式。 SOLUTION SUMMARY 文章将介绍怎样在Application启动时改变标准的manager的实现方式，而不改变managers的正常用法(在程序中我们依然使用mx.managers.*包下的类)。我们也不用为改变某个manager类而重构所有的代码。 EXPLANATION 一般的做法是自定义manager类并在使用manager时使用自定义的类而不是默认的manager类。拿PopUpManager举例，如果想自定义addPopup方法，一般做法是新建一个类，比如叫PopManager，之后在该使用PopUpManager类时使用PopManager类。这样我们只需继承默认的manager类，并调用默认类的所有方法，而不用重构所有的代码。 在进一步的讨论中，我们还是拿PopUpManager举例。PopUpManager所有的公开方法都是静态的，在其内部，它使用mx.core.PopUpManagerImpl(实现了IPopUpManager接口)的实例处理各种弹出窗口。实现类存储在mx.core.Singleton类中。所有的managers类的实现类都在程序启动时由SystemManager在mx.core.Singleton注册，一个manager类只能有一种实现类。mx.core.Singleton使用registerClass方法来注册这些单实例的实现类。注册的原则是使用先注册的类(first in wins)，之后注册的类将被忽略。所以如果我们想使用自定义的manager类，必须在SystemManager注册默认的类之前行动。SystemManager的注册过程在SystemManager.mx_internal::docFrameHandler方法中实现，该方法在Application实例化之前被调用。 最好的(看起来也是唯一的)重写框架manager类实现的方法就是实现IPreloaderDisplay接口，使用该接口注册自定义的manager类。IPreloaderDisplay接口的实现类DownloadProgressBar用于在 Flex/AIR程序加载时显示进度条。我们可以使用Application的preloader属性重新为它赋值。SystemManager会在注册manager实现类之前创建和实例化Preloader，因此我们重写IPreloaderDisplay接口的initialize方法。 package my.domain { public class MyPreloader extends DownloadProgressBar { override public function initialize():void { super.initalize(); Singleton.registerClass("mx.core.IPopUpManager", Class( my.domain.managers.MyPopUpManager ) ); }; } } 现在调用PopUpManager的静态方法时就会调用自定义的IPopUpManager实现类的方法，下面是例子， package my.domain.managers { public function MyPopUpManager extends PopUpManagerImpl { private var instance : IPopUpManager; static [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=52&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/06/overriding-default-mx-managers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>
	</item>
		<item>
		<title>declare members for dynamic class(翻译)</title>
		<link>http://ravenzh.wordpress.com/2009/04/03/declare-members-for-dynamic-class%e7%bf%bb%e8%af%91/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/03/declare-members-for-dynamic-class%e7%bf%bb%e8%af%91/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 19:31:37 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[flex cookbook]]></category>
		<category><![CDATA[flex cookbook  dynamic class]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/2009/04/03/declare-members-for-dynamic-class%e7%bf%bb%e8%af%91/</guid>
		<description><![CDATA[参考地址： http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&#38;productId=2&#38;postId=13066 PROBLEM SUMMARY需要为动态的类(dynamic class)声明属性，但有可能与类本身内建的属性冲突 SOLUTION SUMMARY在自定义的命名空间(custom namespace)中声明新成员。 EXPLANATION动态类(dynamic class)允许使用在运行时为其添加属性和方法，这样新添的成员就可能与类内建的成员发生冲突。比如：package{&#160;&#160;&#160;&#160;&#160; import flash.display.Sprite;&#160;&#160;&#160;&#160;&#160; public dynamic class DynamicObject extends Sprite{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public function DynamicObject():void{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; super();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public function someName():void{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; trace(&#8216;method&#8217;);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160; }}我们不能再给DynamicObject类添加&#8221;someName&#8221;属性。下面的代码会引起编译错误&#8221;1168: Illegal assignment to function someName. &#8220;var obj:Object = new DynamicObject();obj.someName = &#8220;value&#8221;; 如果使用namespace，问题迎刃而解。member_ns.aspackage {&#160;&#160;&#160;&#160;&#160; public namespace member_ns = &#8216;urn:some-uri&#8217;;} DynamicObject.aspackage{&#160;&#160;&#160;&#160;&#160; import flash.display.Sprite;&#160;&#160;&#160;&#160;&#160; public dynamic class DynamicObject [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=51&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/03/declare-members-for-dynamic-class%e7%bf%bb%e8%af%91/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>
	</item>
		<item>
		<title>flash fbml facebook application(翻译)</title>
		<link>http://ravenzh.wordpress.com/2009/04/03/flash-fbml-facebook-application%e7%bf%bb%e8%af%91/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/03/flash-fbml-facebook-application%e7%bf%bb%e8%af%91/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 12:05:28 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[facbook application]]></category>
		<category><![CDATA[Translation]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fbml]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=46</guid>
		<description><![CDATA[参考地址: http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview_05.html#swf_fbml 除了在iframe中嵌入Flash app外，我们还可以使用FBML的&#60;fb:swf&#62;标签将Flash包含在FBML app中。使用FBML app的好处就是我们更简单的构建app，只需要向Facebook server返回FBML(Facebook server会解析FBML标签). 坏处是用于显示和用于逻辑的代码会出现在很多地方，如swf文件，app server page中以及返回给Facebook server的FBML中，这样会使代码很凌乱不好维护。参考Comparing iFrame and FBML Flash Facebook applications 获取更多信息。 图 4. A Flash FBML Facebook application 1. 用户在Facebook上请求app; 浏览器向Facebook server发出请求。 2. Facebook server向app server发出请求, 请求一般由app server page处理(PHP,ColdFusion或JSP).Session信息会随着POST URL(与iframe的GET URL相反)发送给app server。 3. app server page引用数据库或其他需要的服务, 包括Facebook的REST API.  和iframe一样server-side页面使用library引用Facebook API以及生成引用标识。因为是通过Facebook server代理，所以在返回用户浏览器之前，和iframe app的过程不同（先由iframe app向Facebook server发送请求，Facebook server返回给iframe app，再由iframe app返回给浏览器）FBML直接请求Facebook [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=46&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/03/flash-fbml-facebook-application%e7%bf%bb%e8%af%91/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>

		<media:content url="http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview/fig04.jpg" medium="image" />
	</item>
		<item>
		<title>flash iframe facebook application(翻译)</title>
		<link>http://ravenzh.wordpress.com/2009/04/03/flash-iframe-facebook-application/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/03/flash-iframe-facebook-application/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 11:48:46 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[facbook application]]></category>
		<category><![CDATA[Translation]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[rpc]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=41</guid>
		<description><![CDATA[参考地址： http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview_04.html#swf_iframe 之前我们已经介绍了一般的iFrame和FBML app的流程，现在我们来看下怎样将Flash整合到app中。虽然我们可以构建一个混合多语言(包括HTML/JavaScript/ActionScript)的app，但在本例中为了简单起见，我们会把精力集中在构建整站都是Flash内容的app上。混合的app可以同时引用server端API以及client端API(如JavaScript API,以及本篇稍后将讨论的ActionScript API)。 我们可以将app的swf并入到iFrame或FBML中。图3展示了iframe app更为简单直接的嵌入方式。 图3. 基于Flash的iframe app结构 1. 用户在facebook站点上访问app;浏览器向facebook server发送HTTP request。 2. Facebook server返回包含了Facebook chrome和iframe标签的HTML/JS页面。 3. 用户浏览器向app server请求iframe中的页面以显示，与之前请求的是server page不同，这次是包装了swf文件的HTML wrapper。注意session信息会和普通的iframe app一样都以GET URL的形式传送给app server，server 的html wrapper将这些信息解析后以flashVars形式传给swf。Swf中的AS代码就可以使用它们直接引用Facebook server的API。 4. app server向用户浏览器返回HTML/JS页面，并在iframe中显示。 5. 用户浏览器再次向app server发出请求，请求HTML页面中的swf文件。 6. app server返回swf文件。 当用户与app交互时，swf向Facebook server或app server发送异步请求。 1. swf中的AS代码直接引用Facebook server API(7,8步)。参考官方ActionScript API 2. 由于Flash player的安全限制，swf只能请求相同域或在crossdomain文件中规定了允许本域访问的域中的数据。当swf访问Facebook server时，Facebook server必须持有让swf所在域访问的crossdomain策略文件。参考Facebook cross-domain policy file,Facebook server允许所有的域访问 &#60;cross-domain-policy&#62; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=41&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/03/flash-iframe-facebook-application/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>

		<media:content url="http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview/fig03.jpg" medium="image" />
	</item>
		<item>
		<title>fbml facebook application(翻译)</title>
		<link>http://ravenzh.wordpress.com/2009/04/02/fbml-facebook-application/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/02/fbml-facebook-application/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 13:13:55 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[facbook application]]></category>
		<category><![CDATA[Translation]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fbml]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=36</guid>
		<description><![CDATA[参考地址： http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview_03.html 现在我们知道怎么处理iFrame app了，那接着我们看看FBML app是怎么工作的。与iframe中将app作为独立的实体相反，FBML app只是Facebook server返回HTML页面的一部分。Facebookserver代理了app中向app server发出的所有请求。app server除了返回部分HTML/JS页面外还返回FBML标签，Facebook server会将这些FBML标签解析成HTML/JS页面，然后返回给用户浏览器。 图2. FBML app结构 1. 用户在facebook站点上访问app;浏览器向facebook server发送HTTP request。 2. Facebook server向app server发送请求，请求通过会由app server页面处理(PHP,ColdFusion或JSP). Session信息会随着POST URL(与iframe的GET URL相反)发送给app server。 3. app相关的页面会引用数据库或其他需要的服务，包括引用Facebook的REST API。API调用必须包含包括app的api key和引用标识(signature)在内的验证信息，应用标识由发送的参数，当前用户的session key生成的MD5哈希值，app的secret key以及其他信息组成。 和iframe一样server-side页面使用library引用Facebook API以及生成引用标识。因为是通过Facebook server代理，所以在返回用户浏览器之前，和iframe app的过程不同（先由iframe app向Facebook server发送请求，Facebook server返回给iframe app，再由iframe app返回给浏览器）FBML直接请求Facebook server，然后Facebook server直接返回到浏览器。 FBML中有很多组件，如fb:name可以取得用户姓名，fb:profilepic可以取得头像等等。我们可以在app server中直接返回这些FBML标签，Facebook server会将它们解析成HTML/JS返回给浏览器.但有时我们却不得不自己引用某个api，比如取得好友生日，因为没有有类似功能的FBML标签。 4. Facebook server向app server返回XML或JSON格式的数据。 5. app server向Facebook server返回包含了HTML/JS和FBML标签的页面。 6. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=36&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/02/fbml-facebook-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>

		<media:content url="http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview/fig02.jpg" medium="image" />
	</item>
		<item>
		<title>IFrame Facebook Application(翻译)</title>
		<link>http://ravenzh.wordpress.com/2009/04/02/iframe-facebook-application%e7%bf%bb%e8%af%91/</link>
		<comments>http://ravenzh.wordpress.com/2009/04/02/iframe-facebook-application%e7%bf%bb%e8%af%91/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 12:26:54 +0000</pubDate>
		<dc:creator>Raven Zheng</dc:creator>
				<category><![CDATA[facbook application]]></category>
		<category><![CDATA[Translation]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[iframe]]></category>

		<guid isPermaLink="false">http://ravenzh.wordpress.com/?p=33</guid>
		<description><![CDATA[参考地址: http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview_02.html (FACEBOOK APPLICATION是在基于Facebook Api运行的应用程序， 本文中简称为app) 当用户访问Facebook app时(比如http://apps.facebook.com/someapp)，Facebook的server会针对app的类型(iFrame或FBML)对用户的请求做不同的处理。如果是iframe类型的app，Facebook server会返回一个Facebook的页面，页面的chrome(这里不是指谷歌的浏览器，chrome包括顶部的菜单，右边的广告栏，底部的状态栏和相关的快捷方式和中间的content部分)中的content就是加载了用户app的iframe。 图1.Iframe app的结构 1. 用户在facebook站点上访问app;浏览器向facebook server发送HTTP request。 2. Facebook server返回包含了Facebook chrome和其中的iFrame HTML标签的HTML/JavaScript (JS)页面。 3. 用户浏览器向app server发送请求以以显示iFrame中的内容，一般都是app的页面(如php，ColdFusion或JSP)。Session信息会被包含在GET URL中，app server就会知道是什么用户在从Facebook上发出了请求。 4. app相关的页面会引用数据库或其他需要的服务，包括引用Facebook的REST API。API调用必须包含包括app的api key和引用标识(signature)在内的验证信息，应用标识由发送的参数，当前用户的session key生成的MD5哈希值，app的secret key以及其他信息组成。一般来说，引用标识会在server端页面生成，之后该页面使用相关的library代码引用Facebook。目前Facebook官方支持的library有PHP5，JavaScript和ActionScript3.0, 其他的一些library都是由community开发完成。 5. Facebook server向app server返回XML或JSON格式的数据。 6. app server向用户浏览器返回HTML/JS页面，之后在IFrame中显示。 当用户与app交互时，会发生以下事情： 1. 如果app有链接到新的页面，重复第3和第6步。 2. 或者app中包含有异步的JavaScript引用(ajax),那么第7和10步会执行，与 之前返回新的页面不同的是这次返回XML或JSON格式的数据，这些数据会由页面的JavaScript处理。 3. 还一种选择是在app页面中使用JavaScript直接引用Facebook server(第11和12步)。Facebook官方支持JavaScript Client API。你可以把一系列单个的API引用分组到一个向Facebook发出的HTTP request里。这种方法有好处也有坏处，它减少了向Facebook server发出的HTTP request总数，但它需要app将许多页面结合在一起，这样导致页面十分复杂。 Posted [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ravenzh.wordpress.com&amp;blog=6987515&amp;post=33&amp;subd=ravenzh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
		<wfw:commentRss>http://ravenzh.wordpress.com/2009/04/02/iframe-facebook-application%e7%bf%bb%e8%af%91/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0dc443768e526c7bf3ed2122fcaf338?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Raven</media:title>
		</media:content>

		<media:content url="http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview/fig01.jpg" medium="image" />
	</item>
	</channel>
</rss>
