【问题标题】:Removing a line causes the browser to freeze删除一行会导致浏览器冻结
【发布时间】:2018-12-02 22:44:19
【问题描述】:

从代码中删除这行,浏览器死机,怎么回事?

我将如何防止这种情况发生?

代码写错了,甚至可能发生在第一时间?

apiIsReady = true; 已移除

尝试单击图像上的播放按钮,浏览器会冻结。

https://jsfiddle.net/5umd9zfg/49/

apiIsReady = true; 已添加

https://jsfiddle.net/5umd9zfg/30/

【问题讨论】:

  • 为什么要删除这个?
  • 我想知道从代码中删除该行时浏览器是如何冻结的?

标签: javascript youtube-api youtube-javascript-api


【解决方案1】:

如果不将apiIsReady 设置为true,您将创建循环,该循环会在同一数组的每次迭代中向数组添加新值。

function load_all_waitting_inits()
{
  for(var opts of waitting_inits) // new values are being added with each iteration, preventing loop to end
  {
    init(opts); // parse value of waitting_inits array
  }
}

function init(opts) {
    loadPlayer();
    if (apiIsReady) { // always false
      addVideo(opts.video, opts.playerVars || {});
    }
    else
    {
      waitting_inits.push(opts) // here you are adding values infinitely
    }
}

编辑

检查数组是否包含对象。

function init(opts) {
    loadPlayer();
    if (apiIsReady) {
      addVideo(opts.video, opts.playerVars || {});
    }
    else if(!waitting_inits.includes(opts)) // if array doesn't include opts then push
    {
      waitting_inits.push(opts)
    }
}

【讨论】:

  • 我会在代码中添加这个替换另一个吗?
  • 您可以检查数组是否包含该值,如果没有,则推送它。
  • 我该怎么做?你能提供一个 jsfiddle 让我看看吗?
  • 现在加载视频需要 2 次点击,而不是 1 次点击。 jsfiddle.net/5umd9zfg/51 / 与 1 单击和视频加载相比。 jsfiddle.net/5umd9zfg/30如何在您的代码中修复?
  • 你明白我的意思吗?在您的编辑中:加载视频需要 2 次点击。 jsfiddle.net/5umd9zfg/51 / 这里只需单击 1 次即可加载视频。 jsfiddle.net/5umd9zfg/30 如何修复您的代码,以便在 1 次点击中加载视频,而不是在 2 次点击中加载?需要调整什么来解决,修复该问题?
【解决方案2】:

如果您删除 apiIsReady = true;,则会创建一个无限循环。这就是为什么浏览器会死机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2015-06-21
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多