【问题标题】:Detect if an HTML element has assigned a javascript function or not检测 HTML 元素是否分配了 javascript 函数
【发布时间】:2016-01-25 12:36:59
【问题描述】:

我正在开发一个 Windows 窗体应用程序来解析和分析网页。我使用了网络浏览器控件。该网页有 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);

导航相关 URL 后,我的 Windows 窗体应用程序中的 C# 代码:

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 返回空字符串。

我怎么知道第三个元素使用 addEventListener 分配了 javascript 函数?

【问题讨论】:

标签: javascript c# webbrowser-control javascript-engine


【解决方案1】:

我建议始终调用 .addEventListener,因为:

如果在同一个 EventTarget 上注册了多个相同的 EventListener 并具有相同的参数,则重复的实例是 丢弃。它们不会导致 EventListener 被调用两次,并且 它们不需要使用 removeEventListener 手动删除 方法。 https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

【讨论】:

    【解决方案2】:

    这里好像提到过:Check if an element has event listener on it. no jquery

    使用 JavaScript 无法确定元素是否正在侦听事件。最接近的是 getEventListeners(node),其中 node 是您要检查的元素。但是,这只能在 Google chrome 中使用,并且只能在控制台中使用。所以它不能用于生产。

    【讨论】:

      【解决方案3】:

      DOM 不提供任何 API 来检索所有 eventListener 的列表 (reference) 所以不能那样做。

      也许您可以控制执行 addEventListener() 的代码?然后,您可以在那里创建一个侦听器列表并稍后使用该列表。

      【讨论】:

        猜你喜欢
        • 2021-11-26
        • 2014-10-20
        • 2011-04-06
        • 2013-08-22
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        相关资源
        最近更新 更多