禁用C#WebBrowser中的Javascript单击事件

本文关键字:单击 事件 Javascript 中的 C#WebBrowser 禁用 | 更新日期: 2023-09-27 18:00:41

简介:
我正在做一个C#WinForms+WebBrowser项目
我想在点击超链接时进行一些处理。

以下是我如何将点击事件挂接到HTML文档中的每个超链接:

void webBrowser_DocumentCompleted(对象发件人,WebBrowserDocumentCompletedEventArgs e){HtmlElementCollection链接=webBrowser.Document.links;foreach(链接中的HtmlElement链接){链接Click+=delegate{MessageBox.Show("C#Click!");};}}

问题:
上面的代码运行得很好,但问题是我从javascript代码中得到了副作用,javascript代码还执行一些单击操作。

我艰难地认识到这个问题有多种形式
下面是一个不太明显的例子,说明jQuery操作会让生活变得更困难:

$(document).ready(function() {
  $("a").click(function() {
    alert("jQuery Click!");
  });
});
<html>
<head>
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>>
</head>
<body>
  <a href="#">Click Me!</a>
</body>
</html>
<html>
<body>

这里发生的情况是,当单击WebBrowser控件中的超链接时,将首先弹出"jQuery Click!"警报,只有在解除警报后才会显示"C#Click。

问题:
我到处找,但还没有找到答案。

如何用C#编程阻止jQuery或任何其他形式的javascript代码在WebBrowser中执行?

澄清:
我想说的是,我已经尝试过以多种方式更改文档,例如从webBrowser.DocumentText和内部html节点中剥离<script>标记,以及通过使用HtmlElement和底层IHtmlElement对象。。。

但是运气不好。。

更改webBrowser.DocumentText会导致文档从字符串中重新加载,因此我会丢失原始站点的所有凭据(例如cookie)。更改IHtmlElement对象并没有真正的区别,因为jQuery脚本已经加载,所以我无法再次阻止事件的发生。

禁用C#WebBrowser中的Javascript单击事件

据我所知,没有办法禁用WebBrowser组件中的JavaScript执行。您只能在ScriptErrorsSupressed属性设置为false的情况下抑制错误消息。一个想法是在WebBrowser组件中呈现HTML之前,预先过滤HTML,并使用正则表达式从HTML中消除所有"onclick"事件。