在jsfiddle中取消无限循环执行

时间:2011-09-30 21:11:56

标签: javascript google-chrome infinite-loop jsfiddle

当您在Chrome中的jsfiddle中获得无限循环时,您唯一的选择(我知道)是关闭标签。当然,这意味着您在当前窗口中丢失了所有工作!是否有一种简单的方法来阻止无限执行的脚本?

  1. 我打开了开发人员工具,因为我正在进行一些调试。
  2. 我可以暂停脚本并逐步完成循环。
  3. 我找不到任何地方停止剧本。
  4. 我无法修改脚本或变量以停止无限循环(因为脚本执行发生在单独域上的iframe中,因此不允许使用JavaScript修改iframe中的数据并在控制台中生成异常)
  5. 一切都开始了,因为我决定从我的循环中交换方向

    for (var c = 0; c <= 11; c++)
    

    for (var c = 12; c > 0; c++)
    

    但正如您在上面所见,我忘记将其从c++更改为c--

    任何想法?我仍然打开标签,我希望在没有关闭标签的情况下取回标签: - )

8 个答案:

答案 0 :(得分:97)

如果没有开发者模式,该怎么做:

  • 打开新标签页
  • 使用Shift-Escape打开任务管理器
  • 杀死任务
  • 对已删除的标签使用后退按钮(JSFiddle不会运行脚本)
  • 修复错误
  • 更新

答案 1 :(得分:7)

使用开发者模式,进入资源并找到您的脚本并将其复制并粘贴到文本文档或新窗口中。如果您在资源中找不到它,请搜索您使用的变量或代码行。

答案 2 :(得分:3)

打破无限循环的一种方法是抛出未处理的异常,这将停止当前调用堆栈的执行。 为此:

  1. 暂停debbuger
  2. 在循环中找到一个有希望的语句,例如函数调用:foo.bar(args)
  3. 在控制台中,覆盖要抛出的函数:foo.bar=function(){throw 42;}
  4. 取消暂停调试程序
  5. 为我工作。我没有尝试过,但我相信通过重载getter或setter你可以使用上面描述的技巧进行分配和读取,而不仅仅是函数调用。此外,通过将变量设置为undefined,如果在循环中使用此变量的字段,则可能会导致致命错误(从而中断循环)。例如,delete foo.tab会中断foo.tab[42]foo.tab.bar。出于某种原因,简单地在控制台中写foo=undefined将不会(也许它定义了一个名为foo的控制台窗口的本地变量)。

答案 3 :(得分:1)

运行Process Explorer并终止使用大量CPU的chrome进程......它会“崩溃”页面并让你重新加载......

答案 4 :(得分:1)

循环选项卡处于活动状态时,无法启动Chrome的任务管理器。我不得不选择另一个标签。然后我按下Shift-Escape启动任务管理器,终止JSFiddle进程,重新选择选项卡,然后点击后退按钮显示页面而不运行脚本。

JSFiddle使用iframe加载“result”面板。截至2016年6月,框架的URL是小提琴网址加“/ show /”。我检查了iframe的源代码,发现它加载了另一个带有“/ light /”的URL。其中一个网址应包含您的源代码。

如果您的浏览器支持view-source URI scheme,您可以按如下方式访问您的小提琴源代码:

  • 视图源:jsfiddle.net/user_name/fiddle_hash/revision/light /
  • 视图源:jsfiddle.net/user_name/fiddle_hash/revision/show /

答案 5 :(得分:0)

这里出现了同样的问题,我在脚本暂停状态下打开了javascript控制台。 (使用开发人员工具暂停了它)

然后我更改了变量值,以便while循环结束。

答案 6 :(得分:0)

如果其他人在阅读完其他答案后陷入困境,那么这对我有用(Chrome,Mac)。对我来说,JSFiddle选项卡被“卡住”,但Chrome的其余部分响应。我在“资源”窗格中打开了JavaScript控制台,但它也没有响应。在这种状态下重新加载页面没有用,因为在我得到任何东西之前,JSFiddle会给我脚本。

最后这对我有用;也许它对你有帮助......

  • 虽然页面没有响应,但请转到Chrome > Preferences > Privacy并停用JavaScript。
  • 等待页面死亡(对我来说大约4或5分钟);悲伤的脸图标出现在该标签中。
  • 点击后退按钮。它应该看起来像JSFiddle正在加载,但它不会因为有趣的足够JSFiddle只需要JavaScript来呈现页面。
  • View > Developer > View source
  • 我的剧本只有轻微的损坏,就像div 'panel_js' {{1}}一样无辜地坐在那里。
  • 突出显示,复制,再次呼吸,吸取教训。

答案 7 :(得分:0)

我的文件陷入了循环,并且也会冻结JSFiddle上的仪表板。

  • 我唯一能清除的方法是在另一个Chrome标签中打开“ New Fiddle”页面时在“首选项”标签中禁用JavaScript。
  • 然后导航至所有小提琴。
  • 删除小提琴,然后会出现404错误。
  • 打开JavaScript并重新加载仪表板。
  • 此后能够继续制作和编辑小提琴。