浏览器的抉择,回顾与分析我的6年(一)- IE,少年的记忆

最近大家都很“低俗”,挺没劲的。我决定整理一下这几年使用浏览器的经验,分享一些我的心得。

先说IE,它在我心中的关键词:“简洁”、“古老”、“失望”、“危险”。

相当长的时间里,我曾是IE6的忠实用户:当时我觉得在英文XP-SP2环境下,无任何ActiveX插件的IE6比什么都快,我还记得,04年左右,有少数人向我推荐Firefox(似乎是1.0),我一点都没有动摇,这种状况一直持续到06年。

我第一次上网的时候,是1997年。那一年我初二,浏览器似乎并不是互联网的全部。我所能记得的两个主要爱好是下MP3和联机玩Westwood的红色警戒(最老的版本)。那时我看网页很少,而且有时还使用Netscape Navigator(虽然那时我更喜欢中文版的软件,但在拨号的恶劣环境下,这玩意确实比IE快)。到了2001年,我高二的时候开始逛起了高中的BBS,一发不可收拾。浏览器自然就成为了重要武器。我记得那个时候似乎还是使用IE5.5中文版,没过多久升级到IE6,就再也没有更换过浏览器了。之后虽然陆续有一些新的浏览器出现(我记得腾讯02年就搞出了一个TT),但我始终毫无兴趣:在软件方面,我很迁就自己的习惯,不喜欢随意更换。

04年,室友介绍我用Firefox,我并没有太大兴趣。总之,我和Firefox1.0系列彻底擦肩而过,由于06年之前我并没有从事Web开发工作,我甚至比很多人要晚用Firefox – 直到06年的某一天。

其实我使用IE一向谨慎,不会随便浏览那些低俗站点,例如我就从来不上门户网站。但06年的某一天,我还是犯傻了。当时因为急着寻找一个免费的JavaScript混淆工具而四处搜索。由于一时贪心被流氓网站所骗,就点了几个看起来很普通的链接,我脆弱的IE6很快就“缴械投降”了。瞬间,系统里多了一大堆莫名其妙的进程,我一向不信赖任何杀毒软件,不得不全部重装。

重装后,我选择了Firefox,那时已经有1.5可以使用了,许多有趣的插件、非常喜欢的tab体验让我开始逐渐放弃了对IE的依赖。

至于我如何变得无法离开Firefox,则要追溯到2006年我参加工作的时候说起。而在那之后,IE在我心中的记忆也彻底停止在2006年了。直到07年我开始使用淘宝等服务,才不得不又一次使用IE这一浏览器。但IE已经彻底让我失望了,无论是IE6还是IE7,我看不到他们相比Firefox和Chrome的任何优势。

IE8已可下载安装 – 不止是克隆一个Firebug那么简单

更新,IE8已经发布正式版,关于IE8正式版的一些特色,我转载一下曾在微软负责与Explorer相关项目的好友,Realdodo的一篇论述如下:

IE8即将发布已经不是新闻,很多评论家以及那些讨厌IE的开发者们都对这个亲近标准的IE抱有一丝好感,这也不是新闻。

IE8中最显著的改变莫过于对CSS 2.1的全面支持。正因为现在亲近标准而以前疏离标准,IE8引入了兼容模式这种复杂的新功能,来兼容以前那些不标准的网页。在外界看来,IE8这么痛苦的在标准支持和兼容性方面抉择,简直就是搬起石头砸自己的脚——早知现在,何必当初呢。

我曾经问过负责CSS 2.1标准支持的IE PM,为什么现在才开始做标准支持而以前不做,为什么不做DOM而选择CSS。他对此也感觉有心无力,毕竟无论是支持什么新标准,对IE来说都是一次大手术。IE是在标准产生之前确定的架构,现在能做到如此强大的功能还能支持那么多标准已经很不容易。就比如说对CSS 2.1的支持,IE重写了很多核心代码,花了大量的时间去保证正确性、性能和兼容性,已经有点精力不够。相比而言,还是开发WebSlice和 Accelerator更加省心省力。

现在的IE已经很有点像当年的NetScape。有谁能想到,当IE 5全面打败NetScape时,IE是世界上最标准的浏览器,它全面支持HTML 4和CSS 1,而且它还十分的小巧,比NetScape小一个数量级。IE的胜利绝对不仅仅因为它与Windows绑定,而是因为它实在比NetScape好太多了。NetScape当年拖着沉重的历史包袱,每一个升级都不敢做太大的变动,生怕那些使用了自己独有特性的网站出问题,至于标准,当然是抛在脑后。这何其像现在的IE。

时过境迁,多年之后,Firefox从当年NetScape的残骸之中诞生,Firefox成了当年的IE,IE成了当年的NetScape。当 Firefox一身轻松快速开发新版本的时候,IE还要考虑兼容IE6这样古董的浏览器。当Firefox毫无忌惮的通过自动更新强制用户更新浏览器版本的时候,IE还要修IE6的bug、还要发布IT工具方便众多公司阻止IE升级版本。唉,开发IE真累啊。

有很多人希望有朝一日Firefox能打败IE,解放现在身处“水深火热”之中的Web前端开发者。可是我觉得,这绝对不是未来的趋势,Firefox或者说Mozilla基金会绝不愿意这么做。浏览器世界的盟主不是那么好当的,站在风口浪尖,不但赚不到钱,还要花力气赔名声,得不偿失。

就拿修浏览器漏洞这件事情来说,Vista下的IE7已经做得非常安全,比Firefox好上无数倍,基本上对缓冲区溢出和DEP免疫了,可是大家还是会觉得Firefox更安全,根本原因是舆论导向。IE造好了一座坚固的城池,如果依然能将它攻破,对于攻击者来说,自然很有成就感。同时,新闻也总关注 IE的安全,毕竟它一出问题,全世界大部分电脑都处于危险之中,这绝对是大新闻。一来二去,IE不安全的口碑也就建立。至于Firefox究竟有多安全,那还真不见得。用XPCOM做的Firefox插件真的比ActiveX安全?还真不见得。从技术上来讲,做Firefox版的流氓插件不存在任何技术问题。

从我和IE PM聊天中得到的信息,IE现在最关注的领域是企业级应用和RIA。这两方面,恰好是Firefox最弱的地方。而在这个领域,IE真正的对手是 Google Chrome,所以下一个版本的IE会针对Google Chrome的特性采取很多动作。也许还要再经历3个版本,IE才能够脱胎换骨,不过那时,其他竞争者早不知道发展到什么程度了。对IE来说,是时候考虑学习一下Firefox,来个凤凰涅磐了。我猜,五年之后必有大变,我会拭目以待。

我觉得这篇文章写的很翔实,而且与现在普遍的评测有所区别,值得一读。

(以下是之前的内容,暂时作废)

我大致看了一下发现只是“拷贝”了一份Firebug而已,但仔细一看发现IE8的改进确实挺大。

其安装过程“漫长无比”,原来大部件的下载并没有打包到上面的安装包中。这与Windows Live套件的安装机制类似:初次下载很快,安装进行时比较慢。这种体验也有优势:1、首次下载速度快,“桌面抵达率”高;2、下载包基于本地OS平台,有潜力做成P2P的传输,提高大数据传输速度。

不过其调试工具(Developer Tools)则是完全克隆Firebug,不管是“抄袭无耻”还是“盗亦有道”,总之对于Web Developer来说,这是一件令人愉悦的事情。尤其是那些被IE6折磨了数年虐出来的CSS Geek们,终于可以花点时间研究对社会对人类更重要的东西了。

对于Mozilla来说,这还仅仅是噩梦的开始。IE8全面“模仿”了Firefox开放性的扩展(Add-ons)功能,以下是Add-on的“管理中心”界面:

虽然这个“扩展管理中心”界面非常简陋(图标颜色都没配好,没必要提供大图了),但理念与IE6、IE7完全不同。IE8的扩展(Add-ons)分为三类:

  1. Toolbars and Extensions(扩展、第三方工具栏)
  2. Search Providers(搜索提供商)
  3. Activities(行为活动)

第一类应该是Firefox传统意义上的Extension;第二类则是搜索提供商(我安装时默认是Google)

比较有趣的是第三类,用“Activities”直译为“活动”似乎不太合适,我理解为面向具体的“行为任务”:Blog、Define、Map、Send、Translate。其任务分别是撰写博客(到Live Spaces)、查找定义(科学词典)、地图服务、发送到邮箱、翻译。微软把Blog放到第一位,虽然只是字母顺序的排列,但也让我这个Blogger兴奋不已:)

微软剩下的一个大难题应该是“如何把近几年越来越少的优秀浏览器插件开发者给从Mozilla阵营给拉回来”。如果不引入优秀的浏览器插件开发者,仍靠那帮专门给IE写“恶意插件”的流氓公司、流氓团队,想要与Mozilla去争夺越来越机敏的用户显然是很难的。但从意识形态和开源社区的整体氛围来看,微软恐怕下重金也很难很快完成这项任务。

不过,我也顺便八卦一下:微软在Facebook“先入为主”,而Facebook则拥有Firefox和Firebug的创始人Hewitt。引用一段外界对Hewitt的评论:

Ross and Hewitt are best known as the co-founders of Firefox, which has been downloaded more than 300 million times by people worldwide. Hewitt went on to build popular web development tools such as Firebug.

此外,微软的“下载中心”已经在力推Silverlight版本了。未来的格局会是Mozilla Firefox3、Adobe AIR和Microsoft WPF三分天下么?

附:IE8主页面

好消息 – IE6将退出历史舞台

勘误:Solidot的翻译“强制升级”中“强制”一词不妥,应为“自动升级”(via

2月份除了LOST的回归,还有一个好消息就是微软将通过Windows自动更新服务让IE6彻底滚蛋了。(英文中文

让我们所有的Web前端开发者来庆祝微软这个英明的决策吧。

我简单说说我的看法:

  1. 微软这么做(对非正版Windows系统也提供免费升级服务)很大气,值得称赞。不愧是软件行业的老大哥。
  2. IE6的“死亡”,能够促进整个Web开发界向前进展。Web2.0时代的出现为用户提供了更多便利,但也引发了更多来自用户的需求。用户不再是被动地接受机构内容,而是可以分享、发布自己的心声。然而,为这种复杂交互所提供支撑的技术却一直没有本质的飞跃(IE6已经“横行”太多年了,做过CSS的朋友都知道在IE6下面实现一个position为fixed背景DOM有多无奈)。IE7的升级虽然谈不上是质变,但却让大家看到了希望:浏览器的发展,无论是微软阵营的IE还是Mozilla阵营的Firefox,无疑是能让整个互联网行业受益的。
  3. IE6的“死亡”,将大大提高Web开发人员的工作效率。将大好的青春浪费在兼容IE6的种种奇怪特性上是没有任何意义的。

我预计,在用户需求日益复杂化的未来,微软的IE9将和Mozilla的Firefox3以及Adobe AIR在开发者阵营的争夺上有一场大战。

附:两个月以来aw’s blog IE7访问量所占整站(所有浏览器)百分比状况(利用Google Analytics的最新功能Compare to Site实现),可以看到,十二月份IE7所占比率为17%左右,而1月份已经稳稳高于20%了。

两个月之后我再更新一下这张图,看看是否会有很大的进展(不知道是不是每个人都会乖乖地升级呢)

Web开发者的宿敌 – IE系列

Digg处看到一篇《Digg this if you’re tired of IE costing you money!》,意为“如果你认为IE浪费了你大量的时间和金钱,那么Digg它吧”。截至目前位置,已经被Digg了7643下。讽刺的是,作者的网站由于著名的“Digg Effect”(就是在短期内由于大媒体的反向流量而产生流量激增的效应)而一下冲进了Alexa一万多:

上图是Reach曲线(也可理解为独立IP流量),Rank图(排名图)甚至由于流量激增过猛而出错:

当然,无论如何,对IE系列,尤其是IE6的抱怨,终究只能是抱怨。微软仍然是这个最世界上伟大的IT公司之一。你再恨它,也无法改变它。

作为一个Web产品开发者,我在自己的项目中,仍然要求完全兼容IE6、7,而连我自己最钟爱的Firefox也会为之让步。由于使用jQuery的架构,在JavaScript上的跨平台性基本解决的不错,然而,外观(Prensentation),仍然还有很多工作要做,很多Hack要进行。而且,对于复杂的项目,在IE下,完全无法进行开发、调试,离开Firebug的Web开发,效率将大打折扣(如果您的团队是不用Firebug做Web开发的,那么请联系我,我高薪聘请)。

以至于像上文中所说:“i’m tired of spending 30% of the time developing and 70% fixing for IE’s lack of giving a shit about standards and others.”在这个安静周末的夜晚,我们不得不继续奋战。

如果你也如我一样,为Hack亲爱的IE而加过班,请留言:)

好吧,
亲爱的,请爱我,像你爱你的IE6那样爱我吧;
我会像我爱Firefox和Firebug那样爱你的:)

附送给各位几个IE的经典bug,Web前端开发的,更应该仔细阅读。

_root第一帧下Stage类信息丢失

今天突然在IE下发现用于支援”创建基于Flash技术弹性布局的Web应用程序“的Stage类表现异常。经反复测试,发现当ie下刷新页面时会造成这个问题。而根源是无法获取Stage类的width和height属性(返回0)。Firefox一切正常。

解决方案:不要在第一帧做舞台初始化(Stage Initialization)。

得到结论:

  1. 主观结论:IE是一个很垃圾,很垃圾的浏览器,包括IE7
  2. 客观结论:MovieClip的timeline机制确实不适合部署应用(Application),而更适合部署动画(Motion),至少ActionScript3之前是如此。后来我反复测试发现有很多奇怪的问题。尤其是基于frame的那些API: gotoAndPlay、gotoAndStop、nextFrame、prevFrame等等。

BTW:之前的一个项目由于对用户体验不够重视,而导致目前陷入一个很尴尬的局面。我已经连续工作了四十个小时挽回局面。看来用户体验绝对不能儿戏,尤其是对项目经理来说,千万不要忽视用户体验。并且应该给与相关开发人员足够的激励和重视。

在第一帧做loading,最好如此:

_root.onEnterFrame = function() { if (_root.getBytesLoaded() == _root.getBytesTotal() && Stage.width>10) { //do something (don’t forget to kill onEnterFrame) } }

IE和FF的两种”姿态”

如果要在IE和FF下面开发设计Web应用,真是一件磨练人心智的事情。我不止一次的看到这句话“Of course, then, there’s one standard way and one Microsoft way.”
如同上一篇日志提到,这个世界没有真相一样,这个世界也没有标准。没有永远的标准,只有永远的bugs和hacks,至少现在,你无法否认这一点。OK,鞠躬尽瘁,无愧我心已经很难得,足矣。

曾经需要通过JavaScript动态获取元素样式,发现style属性只可写,并不可读。非常奇怪,后来由于js提供了offsetLeft、offsetWidth等属性,也就没有仔细研究。毕竟大多数情况下,获取基本layout数据足够。然而,更复杂的Web应用则不得不面对需要获得,或者批量获得一些其他的属性值,例如“font-size”等。于是开始查阅相关的问题。

由于FF和IE对DOM以及CSSStyle的各自不同的理解,解决这个问题过程之曲折不想过多描述,我只把自己的心得记录下来以飨读者。在FF、IE、Opera、Safari下同时兼容的做法步骤:
1、定义函数getStyle – 参考 http://www.robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element

function getStyle(oElm, strCssRule){
var strValue = “”;
if(document.defaultView && document.defaultView.getComputedStyle){
strValue = document.defaultView.getComputedStyle(oElm, “”).getPropertyValue(strCssRule);
}
else if(oElm.currentStyle){
strCssRule = strCssRule.replace(/-(w)/g, function (strMatch, p1){
return p1.toUpperCase();
});
strValue = oElm.currentStyle[strCssRule];
}
return strValue;
}

用法:

//假设someElement是DOM中某对象的引用,那么通过以下方法可以获得该对象下的字体大小:
var getSize = getStyle(someElement, “font-size”);

2、注意,对于缩略式表达式,FF无法获取!例如“padding:4px”,在FF下面,只能按照标准返回”padding-left”。简言之

var getPadding = getStyle(someElement, “padding”);

是无效的,需要用

var getPadding = getStyle(someElement, “padding-left”);

一些不开心的事以及一个IE的新bug – 又一次加班到10点半

刚才莫名其妙地被一个不认识的人骂了个狗血淋头,原因似乎是我把非div+css设计者归为“低端”web设计人员。言语之低俗让我不干相信是不是从事Web领域的,其中个别字眼让我我非常恼火,不过想想这两年也没少挨骂,尤其是这两年敢于说真话、说实话乃至影响到某些既得利益者利益的人挨骂挨得最凶,心里好歹能平静一点。刚看到千岛兄的《网页不需要漂亮》,不知道这家伙是不是也被骂了,呵呵……

总之这次为公司制作Web前台页面让我对div+css彻底的有了了解,但是也彻底的心凉了。倒不是心凉div+css本身,而是心凉在大多数Web开发设计人员中,很少有人能坦然面对div+css的作用;很少有人愿意为这个领域付出多一点的时间去实践;更少有人愿意为此重新审视自己错误的开发习惯。

HTML层,从设计到代码,大半个中国互联网,一片狼藉。

还好,我有公司核心团队的坚决支持,能够坚持走这个理念,也希望对Web标准以及高性能HTML开发感兴趣的同志与我联系。

今天又发现一个IE的新bug。当IE中重复的注释语句过多的时候,会出现“重影bug”
这个bug对开发设计者来说真是致命的危害啊!

下面是一句牢骚
快选择Firefox吧,拜托让这该死的满是铜臭的IE早早的离开每一个用户吧。

每天这么加班我才发现我实在是太喜欢单打独斗。这样下去实在不行,必须把整个团队带起来!

PS:为了调试方便,配上了Apache服务器.

常用命令备份一下︿.︿ 
执行apache -t测试配置文件语法是否正确
执行apache -k graceful可以“升级”你的新配置而不重启

Flash跨平台……未免有点寒

且不说从Windows跨到Linux或者Mac。就是IE, FF之间都有N多问题(虽然已经解决)

就拿我的blog小贴士说事:

1、我的“是男人就下100层”游戏是在51空闲时间做好的,结果发现IE下可以响应左右键,而FF却不行。
解决方案,把wmode=transparent去掉:(唉!

2、我的FF可以正常点开ComboBox而IE不行。
解决方案,把ComboBox组件重新编译一次

其实第二点的原因我知道,但我觉得FlashPlayer是不是有点痤……毕竟同样的swf跑在IE和FF居然有如此多的差异。

抱怨一下……期待毕设项目早日结束,快郁闷死了

完美Firefox – IE Tab – 让我们彻底放弃迟钝的IE吧!

==先告诉大家一个好消息,ie7.com域名成功地被FF抢注~哈哈
ie7.com截屏 | Alexa排名表现异常(图)

==更新,好帖:Firefox内存占用问题总结 转载请保留:http://www.awflasher.com/blog/archives/archives/483

近期来使用Firefox,确实尝到了甜头,至少工作效率提高了很多。当然,也强烈推荐大家从我这里下载firefox。(我自己已经2个月不用IE了)
友情推荐这个RSS(最受欢迎的Firefox插件)-https://addons.mozilla.org/rss/firefox/extensions/popular

值得一提的是Firefox下的插件,太舒服了,简单介绍几个我喜欢的:更多我使用的插件见《提问|调查|分享~我们大家都用什么Firefox插件、扩展

Firefox IE tab

·Alexa/PR右下角状态提示插件,占用的资源不多,但是却能让我很快了解一个网站的基本情况,尤其是对于个人blog,我觉得alexa/pr还是能反映一定的价值的。(毕竟商业网站作弊成风) | 下载页面
以我自己的 aw’s blog 的信息为例截图:
Firefox IE tab2

·IE Tab – 让我们彻底放弃迟钝的IE吧,这下可以不用IE进行window Continue reading “完美Firefox – IE Tab – 让我们彻底放弃迟钝的IE吧!”