2008-01
09

刚刚看到一篇好文(原文链接), 对Javascript中的delete操作符分析得很透彻。在这里简单地介绍一下内容。

虽然是一个小小的delete操作符,其行为却异常复杂。

阅读全文 »

2007-01
30

最近一直在开发Ajax应用程序。众所周知Ajax的特点是客户端和服务器分离, 客户端通常由纯Javascript组成,通过XMLHttpRequest对象与服务器通信。 在调试客户端代码时,如果服务器开在本地,尚可通过samba等方式直接编辑 服务器上的客户端js代码,倘若服务器在异地,那么每次修改js代码后通过FTP等 方式上传之后再调试就十分费事。说到这里自然会想到将js代码放到本地, 然而XMLHttpRequest却只能访问同一域名下的URL,本地的js代码无法直接使用 远程服务器上的服务。

迷茫之际,同事介绍了delegate这款软件,利用它即可实现本地调试客户端代码。

delegate可以在这里下载。 delegate实际上是一个功能强大的代理服务器,它有个类似于Linux的mount功能, 能够将Internet上的URL映射到本地。利用这个功能, 即可将远程的服务器端和本地的客户端集成到同一个域名下, 实现客户端代码的本地调试。

方法如下:

  1. 将Apache配置到本机的8080端口,然后将客户端代码放在htdocs下, 使之能够通过 http://localhost:8080/client/ 访问。
  2. 下载delegate并解压缩。
  3. 编辑以下的配置文件 delegate.cfg。
    -P80
    ADMIN="yourname@yourmail.com"
    MOUNT="/client/* http://localhost:8080/client/*"
    MOUNT="/cgi-bin/* http://server-address/cgi-bin/*"
    第一行的 -P80 指定delegate使用80端口;第二行的ADMIN指定管理员邮件地址, 可以随意设置;第三行将客户端映射到 delegate 的 /client/ 路径下; 第四行将远程服务器目录映射到 delegate 的 /cgi-bin/ 路径下。
    另外,如果你需要通过代理服务器访问远程服务器,可以这样设置:
    MOUNT="/cgi-bin/* http://server-address/cgi-bin/*" PROXY="代理服务器地址:端口"
  4. 在命令行输入以下命令安装delegate。注意不同版本的delegate的可执行文件名不同。
    dg9.4.1.exe +=delegate.cfg
  5. 打开浏览器,访问 http://localhost/client/。这样即可随时看到对js代码的修改。

实际上,用好这个方法还可以“盗用”许多网站的服务,即自己开发客户端, 再通过 delegate 将请求转发给服务器。其方法不再详述。



2006-12
07

Firebug开发小组终于发布了激动人心的Firebug 1.0 Beta版。 与当初的Firebug 0.4版相比,这次的正式发布版已经不仅仅是简单的Javascript控制台, 而是集控制台、调试器、DOM查看/编辑器、网络监视器于一身的强大调试工具。 而使用者也不再限于Javascript开发者,内置的Box模型查看功能让网页设计师也受益匪浅。 下面我们来看看它的新功能吧。

阅读全文 »

2006-11
24

用Javascript经常会遇到一个很头疼的问题:Firefox下工作正常的代码,放到IE下就出现语法错误。这时可以检查一下是否有类似于下面的代码。

<script>
var a = {name:"charlee",};
alert(a.name);
</script>

生成对象时,对象的最后一个属性后面多了一个逗号。频繁添加删除属性时,经常会忘记删除最后的逗号。Firefox会忽视这个逗号,而IE却会报错。



2006-11
23

感谢Clear为我们提供了这个效率更高的字符串替换函数。这是经常使用的HTML特殊字符替换函数,即将 &、<、>、" 等函数替换成 &、<、>、"。通常的作法都是连续使用数个 replace 函数,而Clear仅使用一个 replace 就完成了替换。

我对这两个函数作了benchmark,发现新函数的效率约为原函数的1.4倍。虽然没有预想中那么高效率,但当要替换的字符串更多时,效率应该会提高吧。

测试方法为,对一个2048字节长的字符串分别执行两个函数100次,取其执行时间。下面为10次测试的结果。toTXT_1 为通常的作法,toTXT_2 为Clear的方法。

toTXT_1(ms)toTXT_2(ms)toTXT_1/toTXT_2
1609120475%
2250154769%
1672131379%
1813125069%
1844121966%
2063142169%
2031117258%
1797136076%
2015128164%
1860150081%

测试程序在这里。attachjavascript-benchmark.zip



2006-03
29

0. 前言

所谓IE地址栏表达式,就是在IE的地址栏中输入 javascript:<代码>,执行某些功能,来动态改变原有页面的参数以达到某些目的,例如开放被禁止的按钮、显示原本隐藏的图片等等。本文将就IE地址栏的使用方法做一个详细的说明。

阅读全文 »

2006-03
27

DOM对象event仅在事件发生的期间内存在。因此下面这种写法是错误的:

<a href="javascript:alert(window.event.x)">

而应当写成

<a href="#" onclick="alert(window.event.x); return false">


2006-03
27

通常,如果对HTML元素指定了 position: absolute,则可以通过 left、top、pixelLeft等 属性获取该元素的位置和大小。但是不指定 position:absolute 的情况下则不能使用该方法。

幸运的是如果我们想知道的是文本框的位置,则可以使用 textRange 对象来获取。

如果我们有

<input type="text" id="inputbox">

则可以通过以下代码获取其位置:

var inputbox = document.getElementById('inputbox');
var tr = inputbox.createTextRange();
top = tr.boundingTop;
left = tr.boundingLeft;
height = tr.boundingHeight;