如何在 JS 中删除 window resize Listener

How to remove a window resize Listener in JS

我想删除一些使用 JS 的网站的事件监听器。

当我按照 here 所述使用以下代码时,它不起作用。我在控制台中抛出了数百万条错误消息。

$(window).off("resize");

我还使用以下代码在控制台中添加了 jQuery:

var jq = document.createElement('script');
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
// ... give time for script to load, then type (or see below for non wait option)
jQuery.noConflict();

我怎样才能做到这一点?

试试这个:

const { resize } = getEventListeners(window);

resize.forEach(({ listener }) => {
  window.removeEventListener('resize', listener);
});

以上应该会导致删除附加到 window 的所有 resize 侦听器。

getEventListeners 是一个实用函数,不属于 JavaScript 规范。我不会在用于生产的代码中使用它。

另一个看起来值得研究而不是 getEventListeners 的想法是拦截 addEventListener 函数。

const addEventListener = window.addEventListener;

window.addEventListener = (...args) => {
  if (args[0] === 'resize') {
    console.log('Resize event attached!', args[1]);
  }
  addEventListener(...args);
}

我们甚至可以更进一步,阻止所有调整大小事件处理程序附加。

const addEventListener = window.addEventListener;

window.addEventListener = (...args) => {
  if (args[0] === 'resize') {
    console.log('Resize event trying to attach, but it is being blocked');
  } else {
    addEventListener(...args);
  }
}

也许以上对你的情况有用。