【 以下文字转载自 Google 讨论区 】
发信人: modico (modico), 信区: Google
标 题: gmail client code review,part 15
发信站: 水木社区 (Tue Oct 24 23:43:18 2006), 站内
看到一些bug,希望有google的人能直接或间接的获知一下。由于代码被混淆了,所以我要准确的指出位置不太容易。说之前先介绍一下我的约定。我对js窗口的<script>块编了号,从1开始,到73。里面有一些空架子也算,比如:
<script>
try{;
}catch(e){_B_Err(e)}
</script>
这种空架子有近10个。
BUG #1: 编号12的script块。就是那个集中实现事件机制的块,就是开头有如下定义的块(//注释是我加的):
[
"null", // 0
"onclick", // 1
"onmousedown", // 2
"onkeypress", // 3
"onkeydown", // 4
"onscroll", // 5
"onmouseover", // 6
"onmouseout", // 7
"ontooltip", // 8
"oncmd", // 9
"onmouseup", // 10
"onkeyup", // 11
"onmousemove", // 12
"onpopup", // 13
"onhover" // 14
]
在这个块的末尾部分,有一个函数中有如下判断(type这个名称是我定的,真名可能有异):
if (type == 1 || type == 2 || type == 3 || type == 4 || type == 5 || type == 10 || type == 10)
最后一部分有两个 type==10, 据我根据上下文看,最后一个应为 11;
BUG #2: 编号22的块,大概是集中处理“标签”功能部分的块,在代码中段有2个全局变量定义,(NR,PR是混淆名,Set这个名称是我定的,真名可能有异,...表示其余的字符,太长了,省略):
var NR = new Set/*AW*/("\u6536...".split(/\s*[,\u3001]\s*/));
var PR = /^[^^]+$/;
字符串代表的中文是:
"收件箱,星标,已加星标,草稿,已发送,已发送邮件,所有,所有邮件,任意位置,存档,垃圾邮件,已删除邮件,已读,未读,聊天"
\u3001 代表的中文字符是'、',就是顿号。它之前的那个','是英文逗号,字符串中的是中文全角逗号','(\uff0c), 。NR 部分的本意是要从一个逗号分隔的字符串里转换成一个数组,然而后面正则表达式里的ASCII逗号和中文顿号都不能匹配前面字符串中的中文全角逗号。
BUG 3: 编号61的块,就是集中处理弹出式CHAT聊天功能部分的块,这个块比较大,在类定义的其中一个方法,调用 cancelEventBubble() 函数的时候,参数错误。cancelEventBubble 这个名字是我定的,真名或许有异。代码里传递的参数为 true,实际上应该和紧接其下的一句 cancelEventDefaultAction(a) 传递同样的参数,就是 event 对象,不应该传递 true, 虽不致出错,但没有效果,所以除非你有意不想撤销bubble。
cancelEventBubble() 的实现:
function cancelEventBubble/*ob*/(evt)
{
evt.cancelBubble = true;
}
--
FROM 221.218.162.*