如何删除 chrome 扩展中 html 的事件侦听器?

how can i remove the event listener of html in chrome extensions?

我正在为 chrome 创建一个扩展,我有一个问题。 我想知道,如何从元素中删除事件? 这是我的事件处理程序:

const handler = function (e) {
  console.log("on");
};

我希望我的扩展程序将 mousemove 事件添加到 html 标记。我做到了。

document.querySelector("html").removeEventListener("mousemove", handler);

我想做一些事情,当用户点击我的扩展图标时,如果徽章文本打开,从 html 中删除事件监听器;但我不知道如何从 html 标签中删除事件侦听器!我试过了,但我做不到。

chrome.scripting.executeScript({
  target: { tabId: tabs[0].id },
  function: myFuntion,
  args: ["remove"],
});

我试过 removeEventListener 但没用。我在全局范围内定义了我的函数,但它没有工作,我得到一个错误,你的函数是未定义的。我什至试图将函数存储在 chrome 的存储空间中!等等。 但是在为 chrome 开发扩展时,如何从 html 标签中删除事件监听器? 感谢您的帮助。

executeScript注入的代码在运行时,每次都会创建一个新的函数,所以不能删除之前的函数,因为现在它的内部指针不同了。

您可以通过 window:

保留函数
window.handler = window.handler || function (e) {
  console.log("on");
};

然后您可以稍后在另一个 executeScript 中删除它:

document.querySelector("html").removeEventListener("mousemove", window.handler);