Определить, назначил ли элемент 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()? Тогда вы можете создать список слушателей там и использовать этот список позже.