标签 Bugfix 下的文章

IE6 启用代理自动配置 (PAC) 后的一个必现 Bug

最近从用户那里收到反馈说访问产品出现“白屏”,
由于版本上线前都必须在众多不同环境下通过测试,
于是猜想这个问题的出现与用户的浏览器设置有关;
进而联系用户来模拟其使用环境加以调试,
终于定位并解决了这个“非主流” Bug ,
记录如下以供各位参考。

这里先描述一下重现场景
必须同时满足如下所有条件:

  • IE 6;
  • 启用了“代理自动配置 PAC “;
  • 页面内容非空且使用 http 协议访问;
  • 页面引用了一个未经缓存的外部脚本;
  • 该脚本问了 location 对象;

该场景下访问页面会得到 Access Denied 错误(捕获错误后如下图),
出错位置正是访问 location 对象的那一句。

访问 location 对象时报错

测试环境只对 IE 6 启用了 PAC 而已,
其它设置均保持默认值,
所以除了说服用户升级浏览器或放弃使用 PAC 之外,
我们只能想办法去规避这个问题。

- 阅读剩余部分 -

YUI 全系列 Dom/Node 组件 getXY 方法的一个 Bug

因工作关系我已有些时日没用 YUI 写代码了,
这次由于项目需要我阅读了一些脚本库的代码,
无意间发现了这个 YUI 里 (Dom || Node).getXY() 的小 Bug。
查看了手边的 YUI 2 和 3 的多个版本代码,
均存在此问题。(怀疑其影响全系列)
时间不多,
抽睡前的一点时间写下来吧。

问题描述如下:
当浏览器不支持 node.getBoundingClientRect() 方法时,
我们会选择通过 offset 系列属性一层层向上计算偏移值,
最后得到一个“可能有错误的”元素坐标。
要修正这个错误,
我们需要沿着节点树一层层向上判断是否某个祖先“出现”了滚动条,
如果有,对不起,阉了。

大体的思路是这样没错,
YUI 也确实这样处理了,
而且它也知道元素定位方式中还有一种游离于布局之外的 fixed,
只可惜它没在碰到 fixed 元素时及时刹车,
结果就是在一种较特殊的布局下会多删一次滚动条高/宽度,
导致坐标计算错误。
可叹可叹,
它曾那么接近幸福。

所以当某个有滚动条的页面里存在一个 fixed 定位的元素,
而你又要用 YUI 去取该元素所包含的某个子元素的坐标时,
Bug 就出现了。
文字描述显然不够直观,
请猛击如下链接来查看不才基于 YUI2YUI3 所构建的示例。
(由于该 Bug 只影响不支持 node.getBoundingClientRect() 的浏览器,
请选用诸如 Firefox 2 / Chrome 1 / Safari 3 等浏览器来打开示例,
顺便在这里感谢 IE 团队为我们贡献了如此好用的一个方法)

- 阅读剩余部分 -

修复 Thunderbird 内置的“附件提醒”功能

大概从 Thunderbird 3 的某个 beta 版本开始,
“附件提醒 (Attachment Reminder)” 就成为其内置的一项功能了。
而在此之前,
是需要安装一些扩展才能获得相应功能的。

然而这个新功能并不尽如人意,
首先它不对标题栏进行检查;
其次其检查关键字的效率并不令人满意;
当然最严重的是:
它并不支持中文。
(应该说是非 ANSI 字符)
这种 bug 这应该算 Mozilla 系列的诟病了。
可能由于 Thunderbird 3 的装机量着实不高,
我在 Bugzilla 中没有搜寻到相关的缺陷报告。

既然没有,
咱们就自己动手修。
“说时迟,那时快”,
当你们看到本文的时候,
其实我已经完成 bugfix 了。
在此特别感谢 SpriteVan  君充当了小白鼠。

可能有的观众才刚刚打开电梯,
还不知道 Thunderbird 3 内置的附件提醒功能究竟如何使用,
下面就请容我置喙一下,
向大家介绍该功能的使用方法:

- 阅读剩余部分 -