当前位置: 首页 > 知识库问答 >
问题:

区仅在Chrome上的Angular项目控制台上出现js违规警告

巫晋鹏
2023-03-14

我使用@Angular/cli创建了Angular 4项目,在开发模式下运行应用程序时,我在控制台中收到以下警告:

zone.js:1489 [Violation] 'setTimeout' handler took 209ms
2[Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
2zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
2zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.

奇怪的是警告只出现在Chrome上。(我的chrome构建版本是:58.0.3029.110

  1. 那些(违规)警告是什么意思?
  2. 这对应用程序性能有害吗?
  3. 如何禁用/覆盖或配置zone.js以删除这些警告?

共有1个答案

常自强
2023-03-14

被动事件监听器是DOM规范中的一个新特性,它使开发人员能够选择加入,通过消除滚动来阻止触控式和滚轮式事件监听器,从而提高滚动性能。开发人员可以用{passive:true}注释touch和wheel监听器,以表明他们永远不会调用默认值。该功能在Chrome51、Firefox49中发布,并在WebKit中登陆。参考

Chrome发出警告...

[Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive.

...当您绑定到鼠标滚动事件时,通过调用preventDefault()来警告您可能已禁止事件中的滚动性能或禁用默认事件。

当您尝试在被动事件中调用preventDefault()时,Chrome也会抛出错误。

Unable to preventDefault inside passive event listener invocation.

Firefox也有类似的错误,但似乎没有像Chrome那样发出警告:

Ignoring ‘preventDefault()’ call on event of type ‘wheel’ from a listener registered as ‘passive’.

运行以下代码段并以详细模式查看Chrome控制台。

// WILL throw violation
document.addEventListener("wheel", function(e) {
  e.preventDefault(); // prevents default browser functionality
});

// will NOT throw violation
document.addEventListener("wheel", function(e) {
  e.preventDefault(); // does nothing since the listener is passive
}, {
  passive: true
});
 类似资料:
  • 我花了将近3天的时间来找出为什么在一个大项目中 显示为“?”在另一个从头开始建造的项目中,它显示为“你好". 我正在使用IntellijIdea,但在使用 这两个项目之间唯一的两个区别是在构建系统中:第一个使用gradle,第二个不使用(只是一个简单的项目)。第二个区别是关于以下代码的输出 第一个输入“Charset.defaultCharset=windows-1252”,第二个输入“Chars

  • 问题内容: 我正在使用这个小脚本来查找Firebug是否打开: 而且效果很好。现在,我正在搜索半小时,以找到一种方法来检测Google Chrome的内置Web开发人员控制台是否已打开,但找不到任何提示。 这个: 不起作用。 编辑: 因此,似乎无法检测到Chrome控制台是否处于打开状态。但是有一个“hack”有效,但有一些缺点: 控制台断开连接后将无法工作 在页面加载中打开控制台时将不起作用 因

  • 问题内容: 我有一个带有大类路径的Java项目-许多项目是从不同的.jar文件中导入的,这些文件已作为依赖项添加(通过Maven)。 我正在寻找一种编程方式,以列出来自当前项目的类路径上的所有项,即,从其他库和Java运行时环境本身中 排除 所有导入的类路径项。 我需要在运行时执行此操作,即它应该在实际的当前类路径下工作。 有什么好方法吗? 问题答案: 除非您创建自己的元数据,否则无法执行此操作。

  • 我正在创建一个Angular项目来使用AWS AppSync by Amplify。我注意到,每次我创建一个新项目时,放大器都必须创建一个新的AppSync应用编程接口,这对开发来说是不方便的。 我读了扩增文件,他们建议使用Codigen。但是我在运行这个命令时出错了 关于如何将现有的AppSync API(从AWS控制台创建)正确添加到Angular项目的任何建议。

  • 为什么控制台会疯狂打印,抛出这个警告?

  • 如何从chrome的控制台访问范围变量小部件 像这样的东西在控制台中根本不起作用!