Javascript 将事件标记为显式非被动

Javascript 将事件标记为显式非被动,javascript,google-chrome,events,Javascript,Google Chrome,Events,[违规]将非被动事件侦听器添加到滚动阻止“滚轮”事件。将事件处理程序标记为“被动”以使页面更加响应。 老实说,这个警告让我有点紧张。我有一个事件,有时需要调用preventDefault() 有没有办法将事件明确标记为非被动事件并消除此警告?我知道这不会妨碍执行流程,但这很烦人。我所能找到的只是如何将其标记为被动,但它是一个桌面应用程序,不需要被动标记进行滚动优化 我不确定chrome是怎么想的,当他们将此作为默认警告来实现时,会把开发控制台弄得乱七八糟。我觉得这就像是EULA上的“同意”按钮,

[违规]将非被动事件侦听器添加到滚动阻止“滚轮”事件。将事件处理程序标记为“被动”以使页面更加响应。

老实说,这个警告让我有点紧张。我有一个事件,有时需要调用
preventDefault()

有没有办法将事件明确标记为非被动事件并消除此警告?我知道这不会妨碍执行流程,但这很烦人。我所能找到的只是如何将其标记为被动,但它是一个桌面应用程序,不需要被动标记进行滚动优化

我不确定chrome是怎么想的,当他们将此作为默认警告来实现时,会把开发控制台弄得乱七八糟。我觉得这就像是EULA上的“同意”按钮,不要阅读,只需单击“确定”,cookie警告,只需单击“确定”。。。 我不希望修复它,我希望忽略它,谨慎地


添加侦听器时指定被动:false:

el.addEventListener('click',someFn,{passive:false})


请参阅:

上述解决方案有效,但需要更改对addEventListener的每次调用

如果您希望通过一个影响所有已以旧格式编写的addEventListener调用的更改使警告静音,则可以执行以下操作(修改自)。如果希望它选择性地处理/报告/等,则可以进一步修改此项

var addEventListener_orig = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(type, handler, opts_orig) {
  var opts;
  if(opts_orig === false || opts_orig === true)
    opts = { capture: opts_orig, passive: false };
  else if(!(opts_orig && opts_orig.constructor == Object))
    opts = { passive: false };
  else
    opts = opts_orig;

  arguments[2] = opts;
  return addEventListener_orig.apply(this, arguments);
};

请注意,由于这会修改基本对象,第三方库的行为可能会有所不同(虽然我想不出任何可能发生这种情况的场景,除非3p库也会使用monkey patch addEventListener,如上所述,如果我没有弄错的话,只需填写默认值,否则在没有明确提供的情况下会使用这些值,这样做会消除警告)

是否应该注意,对于不支持
选项的浏览器,它会将
useCapture
设置为true?请告诉我,这段代码放在哪里?请注意,如果修改基本对象,第三方库可能会有不同的行为,因为它们可能不希望进行更改。谢谢!添加--i如果您不同意添加的注释,即代码只是显式地声明将隐式使用的值,请lmk