Определить, назначил ли элемент HTML функцию JavaScript или нет

Я разрабатываю приложение Windows Form для анализа и анализа веб-страниц. Я использовал контроль веб-браузера. Веб-страница имеет HTML и Javascript код ниже. и моя форма Windows имеет код C#. Вот код:

HTML код:

<div id="div1" onclick='func1(this);'>
</div>
<div id="div2">
</div>
<div id="div3">
</div>

Javascript:

function func1(element) {
    ...
}
document.getElementById("div2").onclick = function foo() { doSomething(); }
document.getElementById("div3").addEventListener("click", anyFunc);

Код C# в моем приложении формы Windows после перехода по соответствующему URL:

HtmlElement el1 = WebBrowser.Document.GetElementById("div1");
HtmlElement el2 = WebBrowser.Document.GetElementById("div2");
HtmlElement el3 = WebBrowser.Document.GetElementById("div3");
String el1JavaFunc = el1.GetAttribute("onClick");
String el2JavaFunc = el2.GetAttribute("onClick");
String el3JavaFunc = el3.GetAttribute("onClick");
// check if el1JavaFunc is empty or null
// check if el2JavaFunc is empty or null
// check if el3JavaFunc is empty or null

Таким образом, после проверки связанной строки для каждого элемента, я могу понять, если элемент назначил функцию javascript или нет. Это работает для el1 и el2, но возвращает пустую строку для el3.

Как я могу понять, что третий элемент назначил функцию javascript, используя addEventListener?

3 ответа

Я бы предложил всегда вызывать.addEventListener в любом случае, потому что:

если несколько идентичных EventListeners зарегистрированы в одной и той же EventTarget с одинаковыми параметрами, дублирующиеся экземпляры отбрасываются. Они не вызывают повторного вызова EventListener, и их не нужно удалять вручную с помощью метода removeEventListener. https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

Как упомянуто здесь: Проверьте, есть ли у элемента прослушиватель событий. нет JQuery

Невозможно определить, прослушивает ли элемент событие или нет, используя JavaScript. Ближайшая вещь - это getEventListeners(узел), где узел - это элемент, который вы хотите проверить. Однако это можно использовать только в Google Chrome и только в консоли. Поэтому он не может быть использован в производстве.

DOM не предлагает API для получения списка всех eventListeners ( ссылка), поэтому это не может быть сделано так.

Возможно, у вас есть контроль над кодом, который выполняет addEventListener()? Тогда вы можете создать список слушателей там и использовать этот список позже.

Другие вопросы по тегам