【问题标题】:Script causing DevTools to crash导致 DevTools 崩溃的脚本
【发布时间】:2016-08-10 06:26:27
【问题描述】:

我正在尝试编写一个用于娱乐的聊天机器人,它的主要功能之一是表情包查找。我最初是用 Python 编写的,但现在我用 JavaScript 重写它,因为它可以完全在客户端运行。

这是我的 JavaScript meme() 函数:

function meme(srch) {
  reqUrl = "http://api.pixplorer.co.uk/image?amount=1&size=tb&word=meme";
  memesrch = "";
  while (srch) {
    memesrch += "+" + srch[0];
    srch.slice(1);
  }
  reqUrl += memesrch;
  $.get(reqUrl, function( result ) {
    memeUrl = result['images'][0]['imageurl'];
  });
  return "<a href='" + memeUrl + "'><img src='" + memeUrl + "' style='height: 130px;' /></a>";
}

这是它的原始 Python 函数,如果它可能有帮助的话:

def meme(srch):
    reqUrl = "http://api.pixplorer.co.uk/image?amount=1&size=tb&word=meme"
    if srch:
        memesrch = ""
        while srch:
            memesrch += srch[0] + "+"
            srch = srch[1:]
        memesrch = memesrch[:-1]
        reqUrl += memesrch
    memeUrl = eval(urllib2.urlopen(reqUrl).read())['images'][0]['imageurl']
    return "<a href='" + memeUrl + "'><img src='" + memeUrl + "' style='height: 130px;' /></a>"

我的问题是,当我在页面加载/重新加载后第一次在控制台中运行 meme() 时,它说变量 memeUrl 没有定义。然后,从第二次开始,它工作正常。但是,如果我随后键入 meme(["doge"]) 或将数组中的任何字符串,甚至只是像 meme("hello") 这样的字符串提供给 meme() 函数,它不会返回任何内容,甚至不会返回错误。之后,我输入的任何内容都不会返回,甚至不会返回 1+13$ 之类的内容。几秒钟后,网页崩溃。以下是部分截图:Screenshot of DevToolsScreenshot of Webpage Crash

我不知道是什么导致了这些问题,因为我能想到的唯一可能导致此问题的是无限循环,但我的代码中没有。

【问题讨论】:

标签: javascript python google-chrome google-chrome-devtools


【解决方案1】:

有一个无限循环:

while (srch) {
    ...
}

srch.slice 不会更改原始数组“srch”。 也许这可以解决您的问题:而不是您的 while 循环,请执行以下操作:

memesrch = (srch typeof Array)
    ? '+' + srch.join('+')
    : '+' + srch;

【讨论】:

  • 感谢您的帮助!当我用您的建议替换 while 循环时,它显示无效的令牌类型。但是,当我在原始脚本中将srch.slice(1) 替换为srch = srch.slice(1) 时,它工作得非常好,但有一个问题。第一个请求说 memeUrl 没有定义,然后从那时起的每个请求都返回前一个请求的图像。在获取请求后,我尝试使用while (!memeUrl) {} 解决此问题,但这也无法解决。
  • 把这段代码放在你的$.get之前:var memeUrl = '';
  • 我试过这样做,但它没有返回任何东西。我尝试将while (!memeUrl) {} 更改为while (!memeUrl) {console.log(1);} 以检查它是否处于另一个无限循环中,出于某种原因,确实如此。
  • 你能发布你更新的代码吗?所以我可以看到这一切?或者jsfiddle 什么的……
  • 我只是把它放在 JSFiddle 上:jsfiddle.net/k0rh8pwu 再次感谢您的帮助!
猜你喜欢
  • 2021-09-02
  • 1970-01-01
  • 2021-09-30
  • 2014-10-29
  • 2016-08-28
  • 1970-01-01
  • 2018-01-23
  • 2020-12-02
  • 2013-11-11
相关资源
最近更新 更多