【发布时间】:2011-09-24 18:39:37
【问题描述】:
简介:
我正在开发一个 C# WinForms + WebBrowser 项目。
我想在点击超链接时进行一些处理。
以下是我如何将点击事件与 HTML 文档中的每个超链接挂钩:
void webBrowser_DocumentCompleted(对象发送者,WebBrowserDocumentCompletedEventArgs e) { HtmlElementCollection 链接 = webBrowser.Document.Links; foreach(链接中的 HtmlElement 链接) { 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 中执行?
澄清:
我想说我已经尝试以多种方式更改文档,例如从webBrowser.DocumentText 和内部html 节点中剥离<script> 标签,并使用HtmlElement 和底层IHtmlElement 对象...
但没有运气..
更改 webBrowser.DocumentText 会导致文档从字符串中重新加载,因此我丢失了原始站点的所有凭据(例如 cookie)。并且更改 IHtmlElement 对象并没有真正的不同,因为 jQuery 脚本已经加载,所以我无法阻止该事件的发生。
【问题讨论】:
标签: c# winforms webbrowser-control dom-events