IE在解释表达式的时候显然大有优化的余地,FireFox就没这个毛病。下面这段小代码可以轻松让IE崩溃掉:
var
n
=
32768
;
var s = new Array(n).join( " 0+ " ) + 0 ;
if (confirm( " 真的要杀了浏览器吗? " )){
eval(s);
alert( " 杀不掉,试试把n调大一点? " );
}
var s = new Array(n).join( " 0+ " ) + 0 ;
if (confirm( " 真的要杀了浏览器吗? " )){
eval(s);
alert( " 杀不掉,试试把n调大一点? " );
}
其实就是让IE解析一个“0+0+0+0....”的表达式。
在我的机器上,IE6跑到32255个加法计算就自动关闭了(可以作为一个新的无提示关闭浏览器漏洞呵呵,会把同一个进程打开的全部窗口一起杀掉),IE7还要差些,在31515就挂了。opera也好不到哪里去,32180就崩溃了。而FireFox一直跑到2^27(ie和opera还不到2^15)的时候把我的内存全吃光了,在虚拟内存支持下还是可以执行完成:
var
s
=
"
0+
"
,n
=
27
;
for ( var i = 0 ;i < n;i ++ ) s += s;
alert(s.length / 2 )
s += 0 ;
if (confirm( " 真的要杀了浏览器吗? " )){
eval(s);
alert( " 杀不掉,试试把n调大一点? " );
}
for ( var i = 0 ;i < n;i ++ ) s += s;
alert(s.length / 2 )
s += 0 ;
if (confirm( " 真的要杀了浏览器吗? " )){
eval(s);
alert( " 杀不掉,试试把n调大一点? " );
}