浏览模式: 标准 | 列表
encodeURI 和 encodeURIComponent 都是用来为 URI 进行编码的,而且都是以 UTF-8 字符集进行编码。但是它们之间有一点区别,encodeURI 主要用于对路径部分进行编码,例如 http://www.coolcode.cn/index.php 这样的路径。而 encodeURIComponent 主要用于对路径后的参数值进行编码。例如 http://www.coolcode.cn/index.php?p=1&pp=2 中的 p= 后面的 1 和 pp= 后面的 2,这里应该用 encodeURIComponent 进行编码(虽然在这里编码以后的结果不变)。因为 encodeURI 不对 “:”,“/”,“;”,“#”,“$”,“&”,“+”,“,”,“=”,“?”,“@” 这些符号进行编码,而 encodeURIComponent 则会将它们编码。 对于 ascii 码为 0 - 32 的编码,IE 和 Mozilla/Firefox 都会将它们编码成 %xx 的形式,但是 Opera 这个地方有个 bug,那就是对于 ascii 为 0 的字符,Opera 不对它进行编码(在 Opera 8.5、8.51 和 9.0 上测试结果都一样)。不知道这算不算是 Opera 的一个 bug。

» 阅读全文

IE 的 JScript 5.5 中的数组对象有一个 unshift 方法,这个方法在 Gecko/Opera 浏览器中的 JavaScript 实现中也有,但是它们的返回值却不同,Gecko/Opera 中返回值为新数组的长度,而 IE 中没有返回值,也就是返回值是 undefined。因此,编程时不要依赖这个返回值。
上个月在 WebFX 上看到 Emil A Eklund 写了一个非常棒的 Chart 组件,这个组件棒就棒在它提供了一个 AbstractChartPainter 的抽象类,然后用 Canvas 技术实现了一个 CanvasChartPainter 类,用 SVG 技术实现了另一个 SVGChartPainter 类,只要在使用 Chart 类的实例绘制图表前,用setPainterFactory 方法来指定一个 PainterFactory,就可以用指定的 Painter 实现来进行绘图表了。 但是这个 Chart 组件中所实现的两个 ChartPainter 类所使用的技术过于前卫,因此只有最新的浏览器才支持。用 Canvas 实现的 Painter,只能在 Mozilla Firefox 1.5+ 和 Opera 9+ 上完美运行,在 IE 6.0 上通过 Emil A Eklund 编写的 IECanvas 也能够勉强运行,但因为 iecanvas.htc 加载速度慢的原因,常常会因为没有加载完就开始执行后面的代码而出现错误。而对于较低版本的浏览器和其它尚未支持 Canvas 的浏览器来说就不能执行了。而另一个 SVG 实现的 Painter,能够执行的浏览器则更少。 为了支持更多的浏览器,我找到了 High Performance JavaScript Vector Graphics Library 这个好东西,这个东西的跨平台和跨浏览器性能相当好,但是这里我们要用它来做 Chart 组件的 ChartPainter 类的话,需要用它的在页面完全调入后画入 DIV 元素的方式来创建对象,因此在 Netscape 4 和 Opera < 7 的版本上不能运行,但是目前大部分浏览器还是都支持的。因此我用它实现了一个 JsGraphicsChartPainter 类,有了它,现在 Chart 组件可以在目前几乎所有的浏览器上都可以使用了。 另外,为了兼容更老版本的浏览器,我将 chart.js 也作了修改。取消了数组 push 方法的调用,用其他方式来实现相同的功能。去掉了加载延时处理代码,这段代码主要是为避免 IECanvas 加载不完而出错设计的,但是这个设计本身不完善,还是无法避免这个问题,而且导致 IE 上显示速度变慢,因此去掉了。我认为 IE 上没必要使用 IECanvas,用 JsGraphics 适用范围更广。并且根据浏览器来判断初始化时该加载 CanvasChartPainter 还是 JsGraphicsChartPainter 。 演示和下载见正文

» 阅读全文

大整数运算一般用于密钥计算中。以下是我从 google 上搜索到的几个 JavaScript 版本的的大整数运算库。
  1. http://www.onicos.com/staff/iz/amuse/javascript/expert/BigInt.txt 这是比较早期的一个 JavaScript 版本的大数运算库,由日本高手出雲所作,其中只包含了加减乘除、模(求余)和比较运算。
  2. http://www.faireal.net/demo/bigint0.5/beta28/ 这是另一个日本高手的作品,这个库中包含的功能非常全,它的历史可以参见该文
  3. http://www.leemon.com/crypto/BigInt.js 这个是美国高手 Leemon Baird 的作品,所实现的功能也非常全。
  4. http://www.ohdave.com/rsa/BigInt.js 最后这个来自 dave 的 RSA In JavaScript 网站,这个虽然功能没有前两个强大,但是使用比较方便,做一般的浏览器端加密部分已经够用了。

» 阅读全文

今天为了测试程序兼容性,上 Opera 网站下载了一个 Opera 浏览器,同时发现 Opera 网站上提供了一个 Opera Mini 浏览器的模拟器,因为我的手机太老了,不支持 java 程序,所以只好拿这个模拟器来过过瘾。 当然第一件事情就是试试用这个 Opera Mini 模拟器浏览我的网站看看效果咯,发现支持的非常好!最大的惊喜是,发现 Opera Mini 竟然连我的 JavaScript 实现的 PHPRPC 客户端都支持,而且支持的非常好!而 Ajax 那个实现因为 Opera Mini 缺少 XMLHttpRequest 对象,所以不支持。也就是说如果以后要做 Ajax 效果的网站或者 Web 应用,用 JavaScript 实现的 PHPRPC 客户端兼容性会更好!

» 阅读全文