Silverlight与Flash相比几大缺点

Silverlight是微软正在推广的专门针对Flash的一个浏览器插件,被众多人誉为“Flash”杀手,但从我了解的来看,Silverlight要在短期内打败Flash,并不会有那么容易。

1、跨域读取数据的问题

基于安全考虑,浏览器插件和脚本都是不可以跨域的,Silverlight亦是如此(Silverlight在读取视频文件时可以跨域)。Flash只需在需要跨域的根域下放置一个XML文件即可轻松搞定跨域问题,而Silverlight则需要通过WebService来解决,如果要用WebService,Flash同样也可以随意跨域了。

2、动画制作与设计功能不够强大

Flash在这个方面占有绝对优势,无论从动画设计还是动画编程来说,无论从轻松易用和复杂程度来说Silverlight远远不及Flash。虽然Silverlight可以利用面向对象的C#来进行编程,而AS 3也已经完全成为一种面向对象的编程预言,其语法结构与C#非常类似,Silverlight在这个方面已经没有太多的优势。…

Silverlight对视频流HTTP请求头的要求

Silverlight对视频流HTTP请求头的要求很BT,折腾了一天才发现这个问题。

Silverlight播放视频时,视频源可以是其他域的,即是可以跨域的。读取其他数据是不可以跨域的,比如XML数据等。

Silverlight是集成了Windows Media Player的解码器的,在没有安装Windows Media Player的情况下,只要安装了Silverlight就可以在Silverlight中播放WMV、ASF、MP3等格式的视频和音频文件。Silverlight 1.1 Alpha版安装包总共不到5M,是WPF的精简版,因此解码器精简的程度也可见一斑。

自己弄了个HTTP服务,HTTP响应头并不规范,但这些视频流能在Windows Media Player或者WPF下播放,却不能在Silverlight下播放。但是如果是放在IIS下则能正常播放,于是开始观察HTTP请求,看看二者有什么不一样。然后按照IIS下的HTTP请求头重写了HTTP服务,使其HTTP响应头与IIS下的一样,结果发现果然能够正常播放了!再经仔细测试,发现HTTP响应头中只要含有协议、状态和Content-Length就可以了。…

让Silverlight的大小随浏览器大小变化

当浏览器里只有一个Silverlight,没有其他内容时,我们会希望它能够自适应浏览器大小(屏幕大小),flash在解决这个问题时很为难,而用Silverlight则可以轻松解决自适应大小的问题。

首先,在你的HTML页面中,修改这一行CSS代码:

.silverlightHost { width: 640px; height: 480px; }

改为:

.silverlightHost { width: 100%; height: 100%; }

那么,你现在的Silverlight就是自适应大小的了,但是还有很多问题要解决的,比如你的背景图片大小也得跟着改变了,还有元件布局也得跟着变……因为现在Silverlight还不能像WPF那样自动布局,只能指定绝对位置。不过还好,当Silverlight大小发生变化的时候存在BrowserHost.Resize这样一个事件,我们为这个事件写一个EventHandler就好了,而当前Silverlight的尺寸大小则可以通过BrowserHost.ActualWidth和BrowserHost.ActualHeight来获取,那么手动布局也就还算方便了,不过要是能使用相对位置自动布局就更方便了,不知道Silverlight…

Silverlight使用全屏实在是简单


在网页中浏览视频,使用全屏播放往往能够给用户更好的体验,Silverlight对全屏支持很好,简单几行代码就能搞定全屏的问题。

BrowserHost对象有个属性就是IsFullScreen,设置其为True时就可以实现全屏,设置为False就可以退出全屏,默认情况下按ESC时就可以退出全屏。后来发现,按Alt+Tab也可以,^_*

简单的代码如下:

public void Page_Loaded(object o, EventArgs e)
{
//Required to initialize variables
InitializeComponent();

fullButton.MouseLeftButtonDown += new MouseEventHandler(bgRect_MouseLeftButtonDown);
}

void bgRect_MouseLeftButtonDown(object sender, MouseEventArgs

[翻译]The Web Is Dead

The Web Is Dead
(Long Live the Web!)
Web死了
(Web万岁)

by Rockford Lhotka
August 1, 2007
http://www.ftponline.com/vsm/2007_08/magazine/departments/guestop/

============================================
译者Fdream注:
似乎Web正如日中天,但是不难发现,Web技术的发展却远远超出了最初的HTML,各种个样的技术的出现,是否意味者Web已经结束了或者即将结束?如果Web结束了,我们用什么来替代Web所带来的一切方便和好处?

该文作者是微软公司的地区主管,文章中极度地对Silverlight进行了赞颂,但是从中我们也可以对Web的未来有所遇见,也可以看到微软对Web的一些策略。
============================================…

使用Web技术开发轻量级桌面应用程序

Web技术发展得越来越快,现在如火如荼的AJAX技术,丰富强劲的Flash技术,还有刚刚新生的Silverlight,无一不为Web的RIA(Rich Interactive Application)带来了更为强大方便的实现手段,极大地丰富了Web的应用方式。

在Web 2.0中,Web交互变得越来越多,越来越复杂,功能也越来越强大,于是出现了许多新的创意,甚至把桌面应用也搬到了Web上面,例如:Google就提供了在线文字处理和在线表格编辑器。更甚至于出现了不少基于Web的OS。

但是,我们不妨换一个方式想一想,为什么我们要把桌面的应用程序搬到Web上,而不把Web技术应用到我们的桌面上来?把桌面应用程序搬到Web上,固然有非常多的好处,但是,同样,使用Web技术,我们也可以更加方便了开发出更富互动的轻量级桌面应用程序,为桌面体验带来不一般的感觉。使用XUL和JavaScript开发的Joost在线流媒体播放软件带给了用户一种视频极致体验。我相信,使用Flash、使用Silverlight结合其他桌面软件开发技术,也能够带给用户不同寻常的体验。…

Beta版终究是Beta版

先是Silverlight升级不能正常使用,后来一冲动把Visual Studio也升级到了2008 Beta 2,然后把SilverlightTools也换成了对应的Alpha版本,再装了个最新的Silverlight 1.1,自以为没有什么问题了,建了个Silverlight项目,却发现找不到引用,摸索了半天,最后在网上搜到说要更新SivlerlightTools,微软不久前才发布了一个补丁,于是呼哧呼哧地跑过去下那个补丁,发现它的发布时间是8月10日,而我下载这个东西的日子恰好是8月9日!真是fz(发指)啊!

还好,网速比较快,没用多久,SilverlightTools下载下来了,按照要求,先装Silverlight 1.1,再装Silverlight Tools,好吧,总算装好了,引用也可以找到了,只是TNND写代码的时候没有代码提示和自动完成了……软件不可以fz到这种程度!

也许是我系统的问题,我们到测试服务器上也装一个吧,看会不会有代码提示和自动完成。还好安装的过程不需要人工干预,今天来看,已经装好了,嗯,还有代码提示,那好吧,我用远程控制………

用CSS在图片上再加一个小按钮

很简单的,嗯,就是要做成这样的:

用CSS,当然得用层了,就是在图片上再加一个层,用来放那个按钮,按钮又有两种方式可以放,一种是直接用图片img标签,一种是通过背景图片放上去。这里我们就用背景图片这个方式来做吧!

首先准备这样两张图片:
宽19px,高32px
宽120px,高90px

我们想想:底部要放图片,上面要放一个按钮,貌似需要用到绝对定位,那我们需要为图片再定义一个div样式,用来放图片和这个按钮,我们可以这样写:

.expdiv{
padding:4px;
width:120px;
border:1px solid #c8c8c8;
}

剩下的就是关键的把按钮放上去,在这里,按钮是一个链接,我们可以设置链接的显示方式为block,并设置其z-index值为2(只要比0大都可以),设置其宽高分别为19px和16px(我们只需要显示按钮图片的一半就可以了),那代码可以这么写:

.expbtn{
position:absolute;

Frame里的网页不能透明?

奇怪,Frame类有个Opacity属性,设置其值为0.2一点反应都没有,又貌似没有其他属性可以设置透明度,难道是bug?如果是这样,那么Frame肯定是不能实现有透明度变化的动画了……

用Google搜了一下,找到这样两个帖子:

The animation worked when applied on other elements in a test project I made, including a Frame element with just a solid red background. I think it’s just a limitation of the Frame element when rendering HTML. It uses the WebBrowser control which is just a wrapper around the MSHTML ActiveX control, I believe.

Hmm, it might be fun to write

AS3中方法重载的一种简单实现方式

在AS3中,依然不支持方法重载,但我们可以通过在参数中指定参数初值来实现一些简单的方法重载(非真正的重载),例如:

public function myFunction(arg1:String = “”, arg2:uint = 4):String
{
//方法的主体代码
}

可以根据参数的值来执行不同的代码,样这个方法就实现了同一个方法的两次次重载,包括:

public function myFunction();
public function myFunction(arg1:String);
public function myFunction(arg1:String ,arg2:unit);

当然了,我们也可以使用在JavaScript常中的判断参数个数的方式来模拟重载,如果要求重载的方法都只有一个参数,只是类型不一样时,可以通过对参数进行类型判断来真正模拟方法的重载。…