Browse > Home > Archive: 02月 2008

| Subcribe via RSS

期待Sliverlight2

02月 25th, 2008 | No Comments , 168 views | Posted by flashlizi in Silverlight

前一段时间摸了一下sliverlight1.0,对它以XAML形式描述一个完整的WEB矢量内容非常有兴趣。其中笔刷功能非常有意思。不过粗看了一下API发现,1.0的功能实在是太弱:动画实现太烦,文本控制能力(有条件的支持中文)太弱,事件太少,操作XML太复杂等等。不过对于刚诞生的SL,还是可以理解的。

微软马上就要发布sliverlight2测试了,在First Look at Silverlight 2中看到一些可喜的改变:基于WPF的UI框架;加强及增加了TextBox, Slider, ScrollViewer, Calendar, DatePicker等丰富的控制组件;对HTTP, REST, WS*/SOAP, POX, RSS等的网络支持;包括一个基于.NET的丰富的功能类库,其中有针对XML, javascript, HTML DOM的支持。

不过Beta1版本体重已达4.3MB了,未免有点肥胖症。非常值得期待,尽管它比起flash来差距还是很大。

AS2:通过ExternalInterface使用正则表达式

02月 21st, 2008 | No Comments , 238 views | Posted by flashlizi in Flash8/AS2

AS2中没有正则表达式,虽然有人写过这样的正则类,不过有时候只需少量的正则应用,所以想换个解决方案。因为ExternalInterface的call方法可以调用外部容器中的方法,如果我们的flash是运行在浏览器里的话,那么是否能用javascript来为我们做正则匹配呢?

经过测试,这样的方法是可行的。先看下面的测试代码:

var str:String="www.myDomain.com";
//js代码: 创建和执行regExp方法
var js:String=function regExp(){var str="+str+";return str.replace(/myDomain/g,"RIAidea");}regExp();
//ExternalInterface在浏览器中用javascript的eval方法来执行上面的js代码,并获取返回值
var newstr:String=flash.external.ExternalInterface.call(eval,js).toString();
//在浏览器中弹出窗口显示刚才的返回值
flash.external.ExternalInterface.call(alert("+newstr+"));

把上面代码copy到主时间轴第一帧上,按F12在浏览器中预览(注意文件名不能为Untitled-X,原因请见我上篇文章)。可以看到浏览器会弹出一个窗口,内容为:www.RIAidea.com。这里主要是利用ExternalInterface在浏览器中用javascript的eval方法来执行上面定义包含regExp方法的js代码,并获取正则返回值。最后,再用EI在浏览器中弹出一个窗口,显示刚才获取的返回值。

最后要说明的是,这种偏方有局限性,只能用于浏览器中的flash程序,而且不宜调用复杂的JS方法,请在合适的地方使用。另外,AS3已支持正则,就不需要考虑这样做了,不过,开发flash的web应用的时候,有些地方还是可以使用这样的把外部方法写在AS中的方法的。

一个命名空间namespace应用演示

02月 20th, 2008 | No Comments , 228 views | Posted by flashlizi in Flash CS3/AS3

这是一个用命名空间来控制名称相同的方法的不同实现的例子。三个命名空间string、number、array下均有一个名为print的方法,它们分别实现打印字符串、数字、数组的具体方法。有时候用命名空间也是实现方法重载的一种不错的办法。

演示代码如下:

  1. package {
  2. import flash.display.Sprite;
  3. public class NameSpaceExam extends Sprite{
  4. //打印字符串的NS
  5. private namespace string;
  6. //打印数字的NS
  7. private namespace number;
  8. //打印数组的NS
  9. private namespace array;
  10. //构造函数
  11. public function NameSpaceExam() {
  12. var str:String = "www.riaidea.com";
  13. var num:Number = 200802201507;
  14. var arr:Array = ["flash cs3", "flex3.0", "sliverlight 1.0", 2008, true];
  15. trace(string::print(str));
  16. trace(number::print(num,","));
  17. trace(array::print(arr));
  18. }
  19. //打印字符串
  20. string function print(str:String):String {
  21. return "String: " + str;
  22. }
  23. //打印数字,3节分段计数形式
  24. number function print(num:Number,sep:String=","):String {
  25. var str:String=String(num);
  26. var new_str:String="";
  27. var len:int=str.length;
  28. while(len>3){
  29. var tmp:String=str.slice(len-3);
  30. str=str.substring(0,len-3);
  31. new_str=sep+tmp+new_str;
  32. len=str.length;
  33. }
  34. return "Number: "+str+new_str;
  35. }
  36. //打印数组,枚举每个数组元素
  37. array function print(arr:Array):String {
  38. var str:String = "Array: \r";
  39. for (var i:int = 0, l:int = arr.length; i < l; i++) {
  40. str += "["+i+"]-> "+arr[i].toString()+"\r";
  41. }
  42. return str;
  43. }
  44. }
  45. }

输出结果为:

  1. String: www.riaidea.com
  2. Number: 200,802,201,507
  3. Array:
  4. [0]-> flash cs3
  5. [1]-> flex3.0
  6. [2]-> sliverlight 1.0
  7. [3]-> 2008
  8. [4]-> true

网页中flash对象ID命名错误造成ExternalInterface失效

02月 20th, 2008 | No Comments , 141 views | Posted by flashlizi in Flash CS3/AS3

今天做个小测试的时候,在flash cs3中按F12预览,发现ExternalInterface在IE下失效,而Firefox却很正常。以前做过类似的都没出现过问题。

经过排查,终于发现罪魁祸首是id="Untitled-1",把id中的连字符号(hyphen)去掉就OK了。大家都知道flash默认文件名为:Untitled-X.swf,测试也就没去修改。这样看来IE中的命名对连字符号"-"也是敏感的,最好避免在命名中使用到它。

以前写的一个简便的ajax应用处理js框架Ajaxer

02月 19th, 2008 | No Comments , 127 views | Posted by flashlizi in Javascript

简介:针对ajax应用而开发的一个简单的js框架,功能也是最基本的。有常规的post和get处理方法,拥有onStart、onComplete、onTimeout、onException、onParseError等事件处理机制。如有需要再进行功能扩展吧。源文件及演示下载地址:Ajaxer,功能演示地址:进入

一般属性:
url:ajax对象请求的url地址。必需。
data:ajax对象请求时要发送的数据。可选。格式为值对,如:{name:"ajaxer",author:"alex.li"},默认为null。
timeout:请求超时时间,单位为毫秒。可选。默认为0,即不做超时设置。

其他属性(一般无需设置,有需求时可用):
method:请求方式,可以是“post”或“get”。
async:请求时是否异步,可以是true或false,默认为true。
dataType:请求返回的数据类型。默认为null,需要指定为xml时,可设置为“xml”。
cache:请求是否缓存。默认为false,即不缓存。如果改为true,则启动请求缓存。

方法:post(url,data,callback)
说明:使用post方式发送请求。
参数:
url:请求的url,必需。
data:请求时要发送的数据。可选。格式为值对,如:{name:"ajaxer",author:"alex.li"},默认为null。
callback:请求完成的回调函数。此函数接受一个参数,为请求返回的内容(文本或xml)。

get(url,data,callback)
说明:使用get方式发送请求。
参数:(同post参数说明)

事件:
onStart:请求开始触发。函数对象。
onComplete:请求完成触发。同post或get的callback参数。函数对象。
onTimeout:请求超时触发。函数对象。
onException:请求异常时触发。函数对象。
onParseError:解析返回的数据错误时触发。函数对象。

Actionscript4.0新特性预览

02月 17th, 2008 | No Comments , 282 views | Posted by flashlizi in News

Colin Moock最近发表了一份ECMAScript 4.0的最新特性而AS3还不支持的汇总说明。因为AS是基于ECMAScript的,所以将来的AS4理论上应该会支持ECMAScript 4.0的这些新特性,至少会部分支持。

这些新特性包括:
1、Record Type:记录类型,它可以快速定义一个对象的元素类型,比定义一个类更简洁。如AS3中有Point类,如果我们只需要一个简单的对象来记录一些点的坐标,用Point类就浪费了。于是我们就可以用type关键字来创建记录类型:type Point={x:Number,y:Number},这样我们就可以用new Point(10,20)来定义一个点了。它比AS3中的Point类轻巧而快速,而且是强类型,比如new Point("riaidea","true")就会报错。

2、Array Type:数组类型,同记录类型类似,它可以让你定义一个数组对象的元素类型。比如:type myArray=[int,String],那么第一个元素就只能是int类型,第二元素只能是String类型。

3、Union Types:复合类型,它能指定一个变量为多个类型。如:var content:(String|XML),其中变量content可以为String或XML类型。在方法中的参数定义也可以用复合类型。

4、Generic Functions:重载方法。很多朋友都问为什么AS3没有重载,AS4就会应该有了。

5、Iterators and Generators:迭代器和控制器。与python相似。

6、New Number Types:新数据类型。增加byte, double, decimal,而Number类型则会取消。

更详细的请看Moock的文章:http://moock.org/lectures/newInECMAScript4/
还有ECMAScript4的新标准:http://www.ecmascript.org/es4/spec/overview.pdf

IE7/Firefox阻止navigateToURL打开新窗口的解决方法

02月 13th, 2008 | No Comments , 394 views | Posted by flashlizi in Flash CS3/AS3

新年第一篇文章,首先给大家拜个晚年:)。今天上班终于想起要解决这个问题了。IE7和Firefox(我使用的版本是2.0.0.11)会阻止用navigateToURL方法打开新窗口,而AS2中的getURL方法则不会,让人很不爽。既然项目选择了AS3开发,就只能想办法来解决。

首先当然想到的是ExternalInterface了,测试发现还是会被blocked。后来想添加wmode会不会有所帮助,于是在页面中添加wmode属性为opaque,果然OK了。

现提供AS3中的getURL方法:

使用方法跟AS2中的getURL一样。另外,我只测试了IE6/7,Firefox2,并未对Safari等其他浏览器做测试。最后,最最重要的就是在html中把flash对象设置wmode属性为opaque或transparent。因为wmode属性默认为window,这表明此Flash应用程序与HTML层没有任何交互。

wow gold wow gold wow gold wow power leveling wow power leveling wow power leveling nike shoes nike shoes nike shoes nike shoes jordan shoes Jordan shoes jordan shoes Jordan shoes world of warcraft gold world of warcraft gold Replica handbags 1