在Firefox中实现以函数形式访问Array中元素

有些IE支持的东西,你在msdn里也找不到.
IE支持javascript以函数的形式访问数组中的元素,比如a是一个数组,通常访问其中元素的方法是a[n],在IE里,你也可以用a(n).msdn中javascript/jscript的章节没说你可以这么用,实际上这是一个vbscript的功能.不知道这是因为脚本引擎共享代码造成的bug,还是专门为了讨好VBer.
以前以为要在Gecko中实现这个功能会比较难,前两天研究了一下 Gecko 的 javasript 引擎spidermonkey 以及 javascript object 和 C++ Object 的关系, 发现实际上每个 javascript object 都有一个可选的 Call 接口,这也不奇怪,每个 function 在 javascript 里都是一个 object .所以剩下的事情就是为 nsDOMClassInfo 里的 nsArraySH 和 nsNamedArray 都实现这个接口就可以了.整个补丁只增加了一百来行就搞定了.

Technorati Tags: ,

发表评论

关于Firefox不能使用ctrl+enter在某些论坛发贴的原因

看到很多人抱怨Firefox不能使用ctrl+enter发贴,开始还以为这是一个IE为textarea增加的快捷键,做了几个test case试了以后才知道这并不是IE的功能.
很多报这个问题的人使用的是Dvbbs,找到Dvbbs的代码一看才知道这是Dvbbs自己实现的一个功能.在实现这个功能的时候,对IE和非IE浏览器做了不同的处理.看代码:

if (Dvbbs_bIsIE5){
      var Dvbbs_bodyTag="<style
type=text/css>.quote{margin:5px 20px;border:1px solid
#CCCCCC;padding:5px; background:#F3F3F3
}\nbody{boder:0px}.HtmlCode{margin:5px 20px;border:1px solid
#CCCCCC;padding:5px;background:#FDFDDF;font-size:14px;
font-family:Tahoma;font-style: oblique;line-height : normal
;font-weight:bold;}\nbody{boder:0px}</style></head><BODY
bgcolor="#FFFFFF" title="Ctrl+Enter直接提交贴子"
onkeydown="ctlent();">";
}else{
      var Dvbbs_bodyTag="<style
type=text/css>.quote{margin:5px 20px;border:1px solid
#CCCCCC;padding:5px; background:#F3F3F3
}\nbody{boder:0px}.HtmlCode{margin:5px 20px;border:1px solid
#CCCCCC;padding:5px;background:#FDFDDF;font-size:14px;
font-family:Tahoma;font-style: oblique;line-height : normal
;font-weight:bold;}\nbody{boder:0px}</style></head><BODY
bgcolor="#FFFFFF">";
}

在为IE实现的代码部分多了一个事件处理
onkeydown="ctlent();"
而为非IE浏览器就没有.
再看这个事件处理调用的函数:
function ctlent(){
var ispost=0;
if (document.all)
{
if(event.ctrlKey && event.keyCode==13)
{
Dvbbs_CopyData('Body')
Checkdata()
if (ischeck==true){this.document.Dvform.submit();}
}
}
}

就是处理ctrl+enter提交表单的.
好了,结论就有了.这并不是一个兼容性的问题,因为论坛根本就没有为非IE浏览器实现这个功能.

Technorati Tags: ,

发表评论

madfox 0.3.1内存使用问题的分析和解决方法

环境:Window 2000, 512M内存, P4 2G
比较了三个:
1. Firefox 1.0.2
2. Madfox 0.3.1
3. Madfox 0.3.1(无IE DOM Method补丁)

比较步骤,
A.先打开1个google和19个新浪主页
B.再关掉10个新浪主页
C.最后关掉全部新浪主页,只留下一个google

Firefox 1.0.2 Madfox 0.3.1 Madfox 0.3.1 (disable IE DOM Method Patch)
A 254M 260M 253M
B 143M 166M 144M
C 40.36M 72.1M 40.6M

可以看出IE DOM Method补丁占据了一部分内存.目前这部分方法的实现是在每次网页载入时用javascript加入各个方法的实现到DOM中.这种实现方式类似最近在Firefox扩展版讨论过的Greasemonkey的userScript.
实际使用看来这种方法会增加内存的使用.如果你觉得不可忍受,可以很容易关掉这个功能.方法是在安装目录下找到res目录,里面有一个html.css文件,将这个文件中的下面一段代码注释或者删除就可以了.

/* IE compatibility */
head {
-moz-binding: url('chrome://iecompat/content/iecompat.xml#iecompat-head');
}

感谢宇宙火星报告和分析

Technorati Tags: ,

发表评论

Recent Posts:

Recent Comments:

Archive:

Tags:

Bookmarks:

My music:

About Me:

I am a software engineer in Beijing, China. I write code for work and for fun. I am interested in web technology, life hacking and console games. This blog is dumped from my left brain.
View Robin Lu's profile on LinkedIn

My Flickr:

    drawingAt Modern Sky Music FestivalIMG_0389IMG_0312urumqi panaramaIMG_9664

Friends: