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

时间:2011-06-29 01:06:11

标签: c# winforms webbrowser-control dom-events

说明:
我正在开发一个C#WinForms + WebBrowser项目 我想点击超链接进行一些处理。

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

void webBrowser_DocumentCompleted( object sender, WebBrowserDocumentCompletedEventArgs e )
{
    HtmlElementCollection links = webBrowser.Document.Links;
    foreach ( HtmlElement link in links )
    {
      link.Click += delegate { MessageBox.Show( "C# Click!" ); };
    }
}

问题:
上面的代码效果很好,但问题是我从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中执行?

澄清:
我想说我已经尝试过多种方式改变文档,例如从<script>和内部html节点剥离webBrowser.DocumentText代码,并使用HtmlElement和基础IHtmlElement对象...

但没有运气..

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

1 个答案:

答案 0 :(得分:0)

据我所知,无法在WebBrowser组件中禁用JavaScript执行。 您唯一能做的就是在ScriptErrorsSupressed属性设置为false的情况下禁止显示错误消息。 在WebBrowser组件中呈现HTML之前,我们的想法是预先过滤HTML并使用正则表达式从HTML中删除所有“onclick”事件。