使用 JavaScript,我想在文档中的每个内联事件处理程序被触发之前拦截它们的注册。对于文档的静态节点(即不是由脚本动态注入的节点),我想移除内联事件处理程序并将它们转换为外部事件处理程序(外部处理程序意味着直接node.AddEventListener
从 JavaScript 调用函数)。然而,对于动态节点,我想保留内联事件处理程序(动态节点是使用 JavaScript 注入的节点)。
例如:
<body>
<img onerror="alert(1)" />
<script>
document.getElementById("a").innerHTML = "<img onerror='alert(2)'/>";
</script>
<div id="a"></div>
</body>
在上面的示例中,我希望将 alert(1) 错误事件转换为外部事件,同时将 alert(2) 错误事件保持在内联。我知道如何将内联事件处理程序转换为外部事件处理程序,但我不知道如何 1)在“注册”时和实际触发之前拦截内联处理程序。2)区分静态节点和动态节点的处理程序。
我知道这是一个难题,但任何帮助/评论都会很棒:)