以前在网上看过一文章讲述国外的脚本高手是如何把IE浏览器的判定从32 bytes一步步缩简成最短的7 bytes字符的故事。该代码是通过利用IE浏览器不支持垂直制表符的特性来判定当前的浏览器是否是IE,var ie = !+”\v1″; 然而这个世界纪录在今年的1月8日又被一个俄国人给打破了,判定IE浏览器又缩小了1 bytes,只需要6 bytes的字符即可显示判定IE!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。
var ie = !-[1,];
alert(ie);
[1,]在标准浏览器会返回字符串”1″,相当于调用[1,].toString,
,IE则返回”1,”。但是这样IE与标准都会通过检测,因此使用负号强制转换为数字,标准能成功转换为1,1会在if中自动转换为true,而IE则转换为NaN,再自动转换为false!
如果从非IE的角度判定,可以省一个比特,因为我们做兼容时,绝大多数情况都是IE与非IE的开工。
演示代码:
var notIE = -[1,];
if(-[1,]){
alert(”这不是IE浏览器!”);
}else{
alert(”这是IE浏览器!”);
}
经测试,发现这段只有1才能起到作用,无论是0还是2都不起作用。难倒if(-2)被Javascript认为是非法?C里面可是合法的。
测试所用浏览器分别为IE8和Opera10。
下面收集一些判定IE浏览器各个版本的方法,主要使用IE各个阶段实现的一些方法,我们从这些IE判断中也可以用另一种视角来看IE的发展史。暂时提供到IE4的判定。
var isIE = window.ActiveXObject;
var isVersion = document.querySelectorAll ? 8.0 :
window.XMLHttpRequest ? 7.0 :
document.compatMode ? 6.0 :
(0).toFixed ? 5.5 :
document.getElementById? 5.0 :
document.all ? 4.0 :0;
IE5支持getElementById真是一个伟大的创举。新事物的出现总是引起话题,想起我的javascript启蒙书《Javascript DOM编程艺术》,里面的代码总是少不了判定是否支持getElementById……从此IE5走向辉煌,把网景推向地狱的深渊。IE5发布于1998年9月,从此所有主流浏览器都支持getElementById。
网上找到让IE4支持getElementById的代码,javascript的动态解析立功了。
var ie4=document.all && !document.getElementById;
if(ie4) {
document.getElementById = new Function(’var expr = /^\\w[\\w\\d]*$/, elname=arguments[0]; if(!expr.test(elname)) { return null; } else if(eval(”document.all.”+elname)) { return eval(”document.all.”+elname); } else return null;’)
}
还有getElementsByTagName的实现:
function ie_getElementsByTagName(str) {
if (str==”*”)
return document.all
else
return document.all.tags(str)
}
if (document.all)
document.getElementsByTagName = ie_getElementsByTagName
很明显如果这些方法得到内置的原生支持,工作效率会大大提升,像jQuery的选择器之于querySelectorAll。IE5可能是当年内置方法与私有实现最多的浏览器,因此它赢得很彻底(抛开捆绑的原因)。内置方法越多,那么对于创建类库的工作就越轻松,从那时开始javascript的类库也多起来了。时至今日,javascript挟以jQuery的东风,越来越受到人重视。加之,西方人对后端javascript的研究,W3C许多惊人的草案的实现,微软加快对标准的支持,谷歌V8的javascript引擎与OS的咄咄逼人,我们一同期待IE9盛世的到来吧。
分享到:
相关推荐
这是全世界最短的判断IE浏览器的代码,判断仅仅需要6 bytes
在IE浏览器中打开各种类型的文件,如Word、Excel、PDF和TXT,是常见的Web应用程序功能,这主要通过ASP.NET框架实现。ASP.NET是由微软开发的一个用于构建动态网站、Web应用程序和Web服务的平台。它提供了丰富的功能和...
的故事 但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。详见这里 ...
以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。 代码如下: var ie = !+”\v1″; 仅仅需要7bytes!参见这篇文章,《32 bytes, ehr … 9, ehr … 7!!! to know if your browser is IE》,讲述外国...
IE浏览器在处理URL编码方面可能与其他现代浏览器有所不同,这加剧了这个问题。 针对“Get中文乱码”问题,解决方案通常分为两步: 1. **服务器端配置**: 这里我们提到了修改Tomcat服务器的配置。在Tomcat的`conf...
的故事 但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。 Code: 代码...
这个目前世界上最短的 Javascript 判定 IE 浏览器的方法来自俄罗斯!它已经在各版本的 IE 以及目前其他流行的浏览器上经过测试,基于 IE 的 Bug,微软虽然已经意识到,但是从来没有纠正过。 代码如下: [removed] var...
在本文中,我们将深入探讨如何将图片转换为bytes(字节)格式,以及这个过程在Go语言、易语言和工具开发中的应用。 首先,我们要理解图片的二进制表示。每种图片格式,如JPEG、PNG、BMP等,都有其特定的文件头标识...
在PHP编程中,"Allowed memory size of bytes exhausted"是一个常见的错误,它表示程序在执行过程中耗尽了分配给它的内存。这个错误通常发生在处理大型数据集、递归操作或者内存泄漏时。以下是一些关于如何识别和...
在IT行业中,文件上传是常见的功能之一,尤其是在Web应用程序中,如ASP.NET平台。这个压缩包包含的内容似乎是为了实现一个特定的功能:通过判断文件的bytes码来确认文件类型,并进行安全的文件上传。以下是根据标题...
publicKey.bytes
在這篇文章中,我們將詳細解釋這個錯誤的原因、解决方案和避免這個錯誤的方法。 錯誤原因 當 PHP 腳本執行時,它需要分配一定的内存空間來存儲數據和執行操作。如果腳本需要的内存空間超出了 PHP 設定的内存限制,...
"Stolen Bytes"是反调试和加壳技术中的一种策略,尤其在PE(Portable Executable)文件保护壳中常见。这个概念在第39章中被提到,主要讨论如何通过调试技巧来识别和应对这种技术。在加壳过程中,为了防止原始可执行...
5、在刚才下载的附件中,执行myeclipse9_keygen_activator.exe(注册机),在注册机输入英文名,点Generate Subscription Code, 再点Generate Activation Code,这样注册码和激活码都生成。赶紧打开MyEclipse填写信息...
1、通过Excel生成Proto文件。 2、通过Proto文件创建Proto类。 3、通过Proto类,序列化出Bytes文件。 (1)差异化打表,加快打表速度。 (2)强力打表,以上三个流程全部走一...6、单独处理网络proto文件,创建Proto类
标题“256 Bytes”可能指的是一个与计算机内存或数据存储相关的主题,特别是与256个字节的容量有关。在IT领域,字节是数据的基本单位,8位二进制数字组成一个字节。因此,256字节等于2的8次方,即256B。这通常不会是...
在Node.js环境中,安装`pretty-bytes`非常简单,只需要通过npm(Node.js的包管理器)执行以下命令: ```bash npm install pretty-bytes ``` 然后,在你的代码中引入并使用它: ```javascript const prettyBytes = ...
自己写的float和bytes互相转换的小工具.希望能有帮助.
Java bytes数组与基本类型的相互转换 Int -> Bytes int64ToByte8 int48ToByte6 int40ToByte5 int32ToByte4 int24ToByte3 int16ToByte2 int8ToByte Bytes -> Int bytesToInt64 bytesToInt48 bytesToInt40 bytesTo...
Add PE Bytes v.0.0.1b.rar