【问题标题】:Disable active content in WebBrowser control禁用 WebBrowser 控件中的活动内容
【发布时间】:2016-06-17 03:19:50
【问题描述】:

我在我的应用程序中嵌入了一个 WebBrowser 控件并显示我从服务器接收的内容。具体来说:控件绑定到一个字符串,该字符串包含来自 rest 调用的错误消息,有时是 HTML。

我想知道活动内容是否存在安全风险,例如JavaScript 将作为错误消息的一部分发送。有没有办法指示 WebBrowser 控件禁用所有活动内容?

【问题讨论】:

  • 能否解释的更清楚些?如果您想从服务器禁用 javascript 代码/html,您可以轻松做到。如果您信任服务器,则更容易处理服务器发送给您的内容。
  • 恰恰相反。我不信任服务器。我想在 WebBrowser 视图中显示内容,但已停用所有活动内容。
  • 这是否意味着您要完全禁用 WebBrowser javascript?
  • 是的,我想禁用任何活动内容。整个目的是显示恰好被格式化为 HTML 的信息。

标签: wpf


【解决方案1】:

有几种方法可以做到:

第一种方法是在将字符串传递给浏览器之前从Elian Ebbing's answer 中删除 javascript:

快速的“n”脏方法是这样的正则表达式:

var regex = new Regex(
   "(\\<script(.+?)\\</script\\>)|(\\<style(.+?)\\</style\\>)", 
   RegexOptions.Singleline | RegexOptions.IgnoreCase
);

string ouput = regex.Replace(input, "");

更好的*(但可能更慢)选项是使用 HtmlAgilityPack:

HtmlDocument doc = new HtmlDocument();    doc.LoadHtml(htmlInput);
var nodes = doc.DocumentNode.SelectNodes("//script|//style");
foreach (var node in nodes)       node.ParentNode.RemoveChild(node);
string htmlOutput = doc.DocumentNode.OuterHtml;

*) 有关为什么它更好的讨论,请参阅this thread

这种方式似乎更好更容易。

第二种方法是使用WinForms webbrowser 控件,它允许您控制较低级别的浏览器,但这涉及到对WinAPI 的一些调用。

您可以查看this link 了解更多信息。

【讨论】:

  • 谢谢小樱。我可能需要遵循这种方法。然而,我的想法是指示 WebBrowser 控件禁用活动内容,就像我可以告诉它我的浏览器一样。
  • 是的,如果我们能做到,那将是最好的。但是some people 说这是不可能的。
  • @JohannesSchacht 谢谢:)
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 2023-03-31
  • 2012-09-27
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多