大约两个月前,我们开始使用Rollbar来通知我们Web应用程序中的各种错误。从那以后,我们偶尔会遇到一些错误:

超出ResizeObserver循环限制

让我困惑的是,我们没有使用ResizeObserver,我已经调查了唯一的插件,我认为可能是罪魁祸首,即:

奥蕾莉亚调整大小

但它似乎也没有使用ResizeObserver。

同样令人困惑的是,这些错误消息从1月份就开始出现,但ResizeObserver支持最近才添加到Chrome 65。

给出这个错误的浏览器版本是:

Chrome: 63.0.3239 (ResizeObserver循环限制超过) Chrome: 64.0.3282 (ResizeObserver循环限制超过) Edge: 14.14393 (SecurityError) Edge: 15.15063 (SecurityError)

所以我想知道这是否可能是浏览器漏洞?或者可能是一个实际上与ResizeObserver无关的错误?


当前回答

添加debounce

new ResizeObserver(_.debounce(entries => {}, 200);

为我修正了这个错误

其他回答

如果您正在使用Cypress,遇到这个问题,您可以在support/index.js或commands.ts中使用以下代码安全地忽略它

const resizeObserverLoopErrRe = /^[^(ResizeObserver循环限制超过)]/ 柏树。On ('uncaught:exception', (err) => { /*在这里返回false可以防止Cypress测试失败*/ if (resizeObserverLoopErrRe.test(err.message)) { 返回假 } })

你可以在这里跟随关于它的讨论。 由于Cypress维护者自己提出了这个解决方案,所以我相信这样做是安全的。

您可以安全地忽略这个错误。

一个规范的作者在评论中对你的问题写了一个评论,但它不是一个答案,在评论中不清楚答案是否真的是这个线程中最重要的一个,并且是一个让我在我们的哨兵日志中很舒服地忽略它的答案。

This错误意味着ResizeObserver不能在一个动画帧中传递所有的观察结果。它是良性的(您的站点不会崩溃)。——Aleksandar Totic 4月15日3:14

在规范存储库中也存在一些与此相关的问题。

摩卡用户:

下面的代码片段将覆盖该窗口。Onerror钩子mocha安装并将错误转换为警告。 https://github.com/mochajs/mocha/blob/667e9a21c10649185e92b319006cea5eb8d61f31/browser-entry.js#L74

// ignore ResizeObserver loop limit exceeded
// this is ok in several scenarios according to 
// https://github.com/WICG/resize-observer/issues/38
before(() => {
  // called before any tests are run
  const e = window.onerror;
  window.onerror = function(err) {
    if(err === 'ResizeObserver loop limit exceeded') {
      console.warn('Ignored: ResizeObserver loop limit exceeded');
      return false;
    } else {
      return e(...arguments);
    }
  }
});

不知道有没有更好的办法。

赛普拉斯的一线解决方案。编辑文件support/commands.js:

Cypress.on(
  'uncaught:exception',
  (err) => !err.message.includes('ResizeObserver loop limit exceeded')
);

我们也有同样的问题。我们发现chrome扩展是罪魁祸首。具体来说,织机铬扩展是导致错误(或我们的代码与织机扩展的一些交互作用)。当我们禁用扩展,我们的应用程序工作。

我建议禁用某些扩展/插件,看看其中是否有一个可能导致错误。