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(2) エラー イベントをインラインのままにして、alert(1) エラー イベントを外部イベントに変換したいと考えています。インライン イベント ハンドラーを外部イベント ハンドラーに変換する方法は知っていますが、1) インライン ハンドラーが "登録" されて実際に起動される前にインターセプトする方法がわかりません。2) 静的ノードと動的ノードのハンドラーを区別します。
これが難しい問題であることは理解していますが、ヘルプ/コメントは素晴らしいでしょう:)