说明:
我正在开发一个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脚本已经加载,所以再次,我无法阻止事件发生。
答案 0 :(得分:0)
据我所知,无法在WebBrowser组件中禁用JavaScript执行。
您唯一能做的就是在ScriptErrorsSupressed
属性设置为false的情况下禁止显示错误消息。
在WebBrowser组件中呈现HTML之前,我们的想法是预先过滤HTML并使用正则表达式从HTML中删除所有“onclick”事件。