如何使用JavaScript强制使Chrome页面/选项卡崩溃?

53
尝试使用window.locationwindow.navigate()将浏览器跳转到about:crashchrome://crash是无效的。是否有其他方法可以实现?

这有意义吗?我的意思是我实际上不知道。但是有吗? - karim79
5
创建一个无限循环并放松。 - j08691
可能是出于安全原因,浏览器不允许手动指向那些页面。我认为你可以杀掉Chrome的一些子进程来模拟崩溃。 - nhahtdh
4
重点是处理崩溃。我需要让我的Chrome扩展程序崩溃,以便知道如何从崩溃中恢复...我有多个扩展程序共同通信并作为一个整体运行。当主控制扩展程序检测到其中一个被操作的扩展程序已经崩溃时,它需要知道它处于什么状态,并且如何恢复它(并避免再次崩溃)。 - trusktr
7个回答

98

有趣的循环:

txt = "a";
while(1){
    txt = txt += "a";    //尽可能添加多的字符
}
//[邪恶地笑] BOOM! 所有内存都用完了,现在崩溃了!

http://jsfiddle.net/DerekL/M45Cn/1/

输入图像描述

对于中文字符的抱歉...


额外内容

有趣的循环也适用于Firefox! 输入图像描述

我必须为Safari鼓掌,因为它 自动 在即将崩溃时重新加载页面!做得好 Webkit 开发者们!

哦,对了...

警告:不要在Internet Explorer中尝试... 因为它没有崩溃我的浏览器,反而崩溃了我的Windows 7... 输入图像描述 是的。这之后我不得不重新启动电脑。


1
@Pumbaa80 - 嗯,它是一部手机,我确实预料到它会崩溃。 :P - Derek 朕會功夫
17
所以...在IE/win7中真的出现了堆栈溢出?非常好。 - MaxPRafferty
1
似乎在Firefox上不起作用了,至少不再起作用了,因为它会警告“无响应脚本”并允许您终止它。如果这是基于时间的,您可能可以通过在恰当的时刻创造性地使用setTimeout来解决它。 - InfinitiesLoop
1
a='5';while(true)a=a+a+a+a+a+a+a; 这样更快(指数级) - DDS
4
@DDS: a='5';while(a=a+a); 这就足够了。这依然是指数级的,所以大约在30次迭代后它会填满内存。 :) - Guffa
显示剩余4条评论

62

我意识到这个问题已经过去一年了,但是显然你可以使用chrome://inducebrowsercrashforrealz

以下是从chrome://about中获取的其他调试chrome:// URL列表:

chrome://crash
chrome://kill
chrome://hang
chrome://shorthang
chrome://gpuclean
chrome://gpucrash
chrome://gpuhang
chrome://ppapiflashcrash
chrome://ppapiflashhang
chrome://restart

24
重要提示:chrome://inducebrowsercrashforrealz将会使Chrome的顶层进程崩溃,包括所有浏览器窗口和所有打开的应用程序,而不仅仅是当前标签页,与chrome://crashchrome://kill只会崩溃当前标签页不同。 - Stuart P. Bentley
8
谁会给这样一个致命武器取一个可爱的名字? - Jack G

10

目前来说,这是最简单的方法。创建一个具有数组可能的最大数值的数组。这不会占用计算机的内存,但在几秒钟内它会导致页面崩溃。

[...Array(2**32-1)]

假设你的电脑可以处理这个(但实际上不应该)。尝试以下操作以给你的电脑增加更多压力:

[...Array(2**32-1)].map(_=>Math.ceil(Math.random()*111))

这些可以在地址栏中使用以下命令调用:

javascript:[...Array(2**32-1)]

javascript:[...Array(2**32-1)].map(_=>Math.ceil(Math.random()*111))

当我运行它时,我的电脑完全正常,并且我得到了 [30, 46, 79, 57, 97, 5, 18, 34, 86, 39, 108, 34, 30, 102, 98, 109, 84, 100, 25, 6, 5, 111, 39, 103, 45, 18, 93, 16, 57, 38, 8, 54, 84, 86, 17, 104, 12, 65, 7, 18, 74, 37, 39, 76, 66, 80, 88, 78, 21, 55, 89, 65, 22, 3, 81, 55, 106, 29, 6, 15, 24, 31, 48, 46, 82, 78, 4, 105, 21, 18, 7, 73, 73, 28, 9, 82, 48, 93, 57, 3, 86, 82, 2, 86, 9, 110, 64, 10, 74, 62, 11, 95, 25, 47, 3, 38, 42, 84, 84, 20, …] - YJiqdAdwTifMxGR
2
@Max 你一定有一台好电脑吧?或者一个很棒的浏览器 ;) - myjobistobehappy

7

只需在Chrome地址栏输入以下代码即可看到一个Chrome标签页崩溃的模拟:

chrome://crash

2
好的。感谢您加入并发表此帖。 - trusktr
6
实际上,chrome://crashes 是你查看已记录的崩溃列表的地方。chrome://crash 则是用来故意使渲染器进程(标签页)崩溃的方式,而 chrome://crashes 则可用于查看之后的崩溃情况。 - Bruce Dawson

2

在Reddit上发现了这个

几秒钟内就可以导致i5第8代崩溃。

for (var i = 5; i > 3; i = i + 1)
  { console.log(i); }
<html>
<h1>This Should Crash Your Browser</h1>
</html>

免责声明

如果您运行此代码,它将在几秒钟内崩溃您的StackOverflow页面。


0

我知道这个问题很久了,但有时候我想要严重地崩溃一个应用程序,这样就没人能够忽视可能被错过或忽略的东西。

我认为在“传统”Web应用的情境中,最好的方法是像这样做:

const error = new Error('FOO is undefined - this should never happen');
location.href = (
  '/crash'
    + '?message=' + encodeURIComponent(error.message)
    + '&stack=' + encodeURIComponent(error.stack)
);
throw error

执行 location.href = 'chrome://crash' 只会产生错误,不会有任何反应。

执行 location.href = 'about:crash' 基本上只会将你导航到 'about:blank#blocked' 并呈现白屏。


0

警告!请自行承担风险运行此程序

这可能会导致您的整个电脑崩溃。请自行承担风险进行操作。

console.log([...Array(2**32-1)].map(_=>Math.ceil(Math.random()*111)))

txt = "rip your PC";

for(var i = 0; i === i; i++) {
  txt = txt += " rip ";
  
  console.log(i, txt);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接