-

AS3的Base64编码和解码

Posted by wpm on Aug 26, 2011 in ActionScript, Articles, Flash, Tutorials

as3的Base64编解码

Tags: ,

 
5

Flash Debug Player引起Firefox 3.6崩溃的解决办法

Posted by wpm on Jul 28, 2011 in Articles, Flash

调试Flash的时候,只要有异常,弹出异常窗口以后,Firefox就不响应了,过一会会显示Flash插件崩溃的信息,只能通过任务管理器强行关闭Firefox。 解决方案如下: 1. Firefox地址栏输入about:config,打开高级设置,如果有警告直接忽略 2. 在Filter里搜索dom.ipc.plugins 3. 双击dom.ipc.plugins.enabled.npswf32.dll设为false 4. 也可以把dom.ipc.plugins.timeoutSecs设为-1来禁用插件崩溃的timeout 5. 重启Firefox

Tags: , ,

 
2

FLASHDEVELOP配置(转)

Posted by wpm on Mar 29, 2011 in ActionScript, Articles, DevelopTools, Flash, Tutorials

FLASHDEVELOP配置,常用的一些配置方法及参数。

 
1

Flash XMLSocket 通信问题总结(转)

Posted by wpm on Mar 28, 2011 in ActionScript, Articles, Flash, Flex, Tutorials

Flash XMLSocket 通信问题总结 1、前言 本文以标准两层 C/S 架构为例,对 XMLSocket 通信编程作一沉痛总结。 从开始到调试正常耗掉了我几乎一周的时间,故为沉痛!尚东!!真是太尚东了!!!   为方便描述,把 Flash Player 称作客户端(Client),包括独立的 Player 和嵌入浏览器的 Player。 2、用途 XMLSocket 类提供以 TCP/IP 方式进行程序间通讯的功能。 3、开发基本流程 流程无所谓,先做服务端也好,先做客户端也罢,都不可能把一边做完再做另一边,总之是要同步进行,除非服务端已经存在。 4、客户端开发 XMLSocket 类使用比较简单,基本上就是几个步骤:   1) 创建 XMLSocket 类的实例。 2) 写好需要响应的事件代码,事件很少,如下: onConnect: Socket 成功连接后触发,传入一个参数,指定连接状态 onClose: 服务器端断开 Socket 后触发 onData: 收到服务端数据,或传输错误时触发,传入一个参数,为 undefined 时表示传输错误,否则为收到的数据 onXML: 收到服务端 XML 内容,或传输错误时触发,参数同 onData     典型的代码片段如下: … var g_Socket = new [...]

 
1

AS3——navigateToURL(转)

Posted by wpm on Mar 7, 2011 in ActionScript, Flash

navigateToURL() 可以用来打开一个新的浏览器窗口,也可以用来flex和js之间的通信,比如打开一个新窗口: var url:URLRequest = new URLRequest(“http://www.eb163.com”); navigateToURL(url, ”_blank”); 这个函数也可以用来执行js,例如: var url:URLRequest = new URLRequest(“javascript:window.close()”); 或者: var urlLURLRequest = new URLRequest(“javascript:myFun(para1…paran)”) myFun()函数是html页面的script部分定义的,函数参数一定要有引号! navigateToURL(url, ”_self”); 也可以用来发送email: var urlURLRequest = new URLRequest(“mailto:55555@163.com”); navigateToURL(url, ”_blank”); 阻止navigateToURL弹窗的解决方法: package FlashCode.utils{ import flash.display.Sprite; import flash.net.URLRequest; import flash.net.navigateToURL; import flash.external.ExternalInterface; public class openWindow { public function openWindow(url:String, window:String=”_blank”, features:String=”"){ var WINDOW_OPEN_FUNCTION:String = ”window.open”; var myURL:URLRequest = new URLRequest(url); var browserName:String = getBrowserName(); if(getBrowserName() == ”Firefox”){ ExternalInterface.call(WINDOW_OPEN_FUNCTION, url, window, features); } //If IE, else if(browserName == ”IE”){ ExternalInterface.call(WINDOW_OPEN_FUNCTION, url, window, features); //ExternalInterface.call(“function setWMWindow() {window.open('” + url + ”');}”); } //If Safari else if(browserName == ”Safari”){ navigateToURL(myURL, window); } //If Opera else if(browserName == ”Opera”){ navigateToURL(myURL, window); } else { navigateToURL(myURL, window); } /*Alternate methodology… var popSuccess:Boolean = ExternalInterface.call(WINDOW_OPEN_FUNCTION, url, window, features); if(popSuccess == false){ navigateToURL(myURL, window); }*/ } private function getBrowserName():String{ var browser:String; //Uses external interface to reach out to browser and grab browser useragent info. var browserAgent:String = ExternalInterface.call(“function getBrowser(){return navigator.userAgent;}”); //  Debug.text += ”Browser Info: [" + browserAgent + "]“; //Determines brand of browser using a find index. If not found indexOf returns (-1). if(browserAgent != null && browserAgent.indexOf(“Firefox”) >= 0) { [...]

 
-

跨域资源共享的10种方式(转)

Posted by wpm on Feb 14, 2011 in ActionScript, Articles, Flash

http://www.woiweb.net/10-cross-domain-methods.html 在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢? 同源策略 在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢?当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.example.org),那么我们就可以认为它们是相同的域。比如http://www.example.org/index.html和http://www.example.org/sub/index.html是同域,而http://www.example.org, https://www.example.org, http://www.example.org:8080, http://sub.example.org中的任何两个都将构成跨域。同源策略还应该对一些特殊情况做处理,比如限制file协议下脚本的访问权限。本地的html文件在浏览器中是通过file协议打开的,如果脚本能通过file协议访问到硬盘上其它任意文件,就会出现安全隐患,目前IE8还有这样的隐患。 受到同源策略的影响,跨域资源共享就会受到制约。但是随着人们的实践和浏览器的进步,目前在跨域请求的技巧上,有很多宝贵经验的沉淀和积累。这里我把跨域资源共享分成两种,一种是单向的数据请求,还有一种是双向的消息通信。接下来我将罗列出常见的一些跨域方式,以下跨域实例的源代码可以从这里获得。 单向跨域 JSONP JSONP (JSON with Padding)是一个简单高效的跨域方式,HTML中的script标签可以加载并执行其他域的JavaScript,于是我们可以通过script标记来动态加载其他域的资源。例如我要从域A的页面pageA加载域B的数据,那么在域B的页面pageB中我以JavaScript的形式声明pageA需要的数据,然后在pageA中用script标签把pageB加载进来,那么pageB中的脚本就会得以执行。JSONP在此基础上加入了回调函数,pageB加载完之后会执行pageA中定义的函数,所需要的数据会以参数的形式传递给该函数。JSONP易于实现,但是也会存在一些安全隐患,如果第三方的脚本随意地执行,那么它就可以篡改页面内容,截获敏感数据。但是在受信任的双方传递数据,JSONP是非常合适的选择。 flash URLLoader flash有自己的一套安全策略,服务器可以通过crossdomain.xml文件来声明能被哪些域的SWF文件访问,SWF也可以通过API来确定自身能被哪些域的SWF加载。当跨域访问资源时,例如从域www.a.com请求域www.b.com上的数据,我们可以借助Flash来发送HTTP请求。首先,修改域www.b.com上的crossdomain.xml(一般存放在根目录,如果没有需要手动创建) ,把www.a.com加入到白名单。其次,通过Flash URLLoader发送HTTP请求,最后,通过Flash API把响应结果传递给JavaScript。Flash URLLoader是一种很普遍的跨域解决方案,不过需要支持iOS的话,这个方案就无能为力了。 Access Control Access Control是比较超越的跨域方式,目前只在很少的浏览器中得以支持,这些浏览器可以发送一个跨域的HTTP请求(Firefox, Google Chrome等通过XMLHTTPRequest实现,IE8下通过XDomainRequest实现),请求的响应必须包含一个Access-Control-Allow-Origin的HTTP响应头,该响应头声明了请求域的可访问权限。例如www.a.com对www.b.com下的asset.php发送了一个跨域的HTTP请求,那么asset.php必须加入如下的响应头: header(“Access-Control-Allow-Origin: http://www.a.com”); window.name window对象的name属性是一个很特别的属性,当该window的location变化,然后重新加载,它的name属性可以依然保持不变。那么我们可以在页面A中用iframe加载其他域的页面B,而页面B中用JavaScript把需要传递的数据赋值给window.name,iframe加载完成之后,页面A修改iframe的地址,将其变成同域的一个地址,然后就可以读出window.name的值了。这个方式非常适合单向的数据请求,而且协议简单、安全。不会像JSONP那样不做限制地执行外部脚本。 server proxy 在数据提供方没有提供对JSONP协议或者window.name协议的支持,也没有对其它域开放访问权限时,我们可以通过server proxy的方式来抓取数据。例如当www.a.com域下的页面需要请求www.b.com下的资源文件asset.txt时,直接发送一个指向www.b.com/asset.txt的Ajax请求肯定是会被浏览器阻止。这时,我们在www.a.com下配一个代理,然后把Ajax请求绑定到这个代理路径下,例如www.a.com/proxy/, 然后这个代理发送HTTP请求访问www.b.com下的asset.txt,跨域的HTTP请求是在服务器端进行的,客户端并没有产生跨域的Ajax请求。这个跨域方式不需要和目标资源签订协议,带有侵略性,另外需要注意的是实践中应该对这个代理实施一定程度的保护,比如限制他人使用或者使用频率。 双向跨域 document.domain 通过修改document的domain属性,我们可以在域和子域或者不同的子域之间通信。同域策略认为域和子域隶属于不同的域,比如www.a.com和sub.a.com是不同的域,这时,我们无法在www.a.com下的页面中调用sub.a.com中定义的JavaScript方法。但是当我们把它们document的domain属性都修改为a.com,浏览器就会认为它们处于同一个域下,那么我们就可以互相调用对方的method来通信了。 FIM – Fragment Identitier Messaging 不同的域之间,JavaScript只能做很有限的访问和操作,其实我们利用这些有限的访问权限就可以达到跨域通信的目的了。FIM (Fragment Identitier Messaging)就是在这个大前提下被发明的。父窗口可以对iframe进行URL读写,iframe也可以读写父窗口的URL,URL有一部分被称为frag,就是#号及其后面的字符,它一般用于浏览器锚点定位,Server端并不关心这部分,应该说HTTP请求过程中不会携带frag,所以这部分的修改不会产生HTTP请求,但是会产生浏览器历史记录。FIM的原理就是改变URL的frag部分来进行双向通信。每个window通过改变其他window的location来发送消息,并通过监听自己的URL的变化来接收消息。这个方式的通信会造成一些不必要的浏览器历史记录,而且有些浏览器不支持onhashchange事件,需要轮询来获知URL的改变,最后,URL在浏览器下有长度限制,这个制约了每次传送的数据量。 Flash LocalConnection 页面上的双向通信也可以通过Flash来解决,Flash API中有LocalConnection这个类,该类允许两个SWF之间通过进程通信,这时SWF可以播放在独立的Flash Player或者AIR中,也可以嵌在HTML页面或者是PDF中。遵循这个通信原则,我们可以在不同域的HTML页面各自嵌套一个SWF来达到相互传递数据的目的了。SWF通过LocalConnection交换数据是很快的,但是每次的数据量有40kb的大小限制。用这种方式来跨域通信过于复杂,而且需要了2个SWF文件,实用性不强。 [...]

Tags:

 
-

深入理解ApplicationDomain和SecurityDomain

Posted by wpm on Dec 18, 2010 in AIR, ActionScript, Articles, Flash, Flex

教程:深入理解Flash的沙箱 – Application Domains 教程:深入理解Flash的沙箱 – Security Domains

 
-

flash 全屏白屏问题——显示设置

Posted by wpm on Sep 14, 2010 in ActionScript, Articles, FDS, FMS, Flash, Flex, Uncategorized

可能是由于启用硬件加速引起的。把勾去掉即可。 显示设置 什么是显示设置? 显示设置允许您使用硬件加速扩展来提高在 Flash Player 中的播放速度。 如果不执行任何操作,会出现什么情况? 默认情况下,会选择“启用硬件加速”来改进在 Flash Player 中播放的质量,特别是全屏播放的性能。 什么是硬件加速扩展? 尽管 Flash Player 本身可以显示高质量视频和图像,但是硬件加速扩展使用您的计算机上的视频卡或显卡来显示图像和视频,与 Flash Player 在它本身上显示图像和视频相比,更加清晰、速度也更快。 硬件加速扩展是否可以在所有计算机上使用? 要想启用硬件加速扩展,对于 Windows,需要 Microsoft DirectX 9 以及 128MB VRAM,对于 Apple Macintosh Mac OS X 10.2 版或更高版本,需要 OpenGL。对较早的硬件和驱动程序可能会有兼容性问题。(请参阅 Flash Player 系统要求。) 使用较旧版本的 Flash Player,您应该看不到显著的变化,因为播放器会从硬件加速扩展转换回到软件扩展。 如果使用 Flash Player 时出现显示问题,应该怎么办? 如果使用 Flash Player 时出现显示问题,如图片质量差或较慢的显示时间,请在“显示”面板中取消选择“启用硬件加速”。 这应该可以消除 Flash Player 的硬件或驱动程序兼容性问题。 [...]

 
2

flash 平台性能优化文档(下载)

Posted by wpm on Aug 11, 2010 in ActionScript, Articles, Downloads, Flash, Flex, Tutorials, Uncategorized

flash 平台性能优化文档 下载 线上地址:http://help.adobe.com/zh_CN/as3/mobile/index.html 程序优化小技巧

Tags: ,

 
3

利用flash.system.Capabilities来检测,Capabilities提供一些属性,这些属性描述了承载 SWF 文件的系统和播放器的特征,

Posted by wpm on Aug 10, 2010 in ActionScript, Articles, Flash, Flex, Tutorials

通过使用Capabilities对象来确定用户所拥有的设备的类型,如果熟悉设备的功能,则可以通知服务器发送合适的 SWF 文件,或是通知 SWF 文件变更其播放方式,从而获得良好的效果。言归正传,下面是一段代码,用来实现获取flashplayer版本信息: var versionString:String = Capabilities.version; var pattern:RegExp = /^(\w*) (\d*),(\d*),(\d*),(\d*)$/; var result:Object = pattern.exec(versionString); if (result != null) { trace(“input: ” + result.input); trace(“platform: ” + result[1]); trace(“majorVersion: ” + result[2]); trace(“minorVersion: ” + result[3]); trace(“buildNumber: ” + result[4]); trace(“internalBuildNumber: ” + result[5]); } 其中的plarform为播放器运行平台,其中的可能值是WIN、MAC以及UNIX. 其中的majorVersion为主版本号,minorVersion为次版本号,buildNumber为生成版本号,internalBuildNumber为内部生成版本号。 例如一个完整的版本信息可能是WIN 9,0,0,0,是一个win平台上运行的9.0版本的flashplayer。

Tags: , ,