【问题标题】:Disable Javascript click events in C# WebBrowser在 C# WebBrowser 中禁用 Javascript 点击事件
【发布时间】: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 节点中剥离&lt;script&gt; 标签,并使用HtmlElement 和底层IHtmlElement 对象...

但没有运气..

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

【问题讨论】:

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


    【解决方案1】:

    据我所知,没有办法在 WebBrowser 组件中禁用 JavaScript 执行。 您唯一能做的就是通过将ScriptErrorsSupressed 属性设置为false 来抑制错误消息。 一个想法是在 WebBrowser 组件中呈现 HTML 之前,使用正则表达式预过滤 HTML 并从 HTML 中消除所有“点击”事件。

    【讨论】:

    • 正如我在澄清部分提到的,我已经尝试过了。事情是我想关注链接并下载引用的文件。这需要经过身份验证的会话。 Bt 剥离标签并从字符串甚至本地文件重新加载,我丢失了经过身份验证的会话(这错过了整个要点)。
    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多