首页 > 解决方案 > 删除一行会导致浏览器冻结

问题描述

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

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

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

apiIsReady = true; 已移除

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

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

apiIsReady = true; 添加

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

标签: javascriptyoutube-apiyoutube-javascript-api

解决方案


如果不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)
    }
}

推荐阅读