【问题标题】:How to inject <DIV> into WPF WebBrowser Control to overlap all webpage content within?如何将 <DIV> 注入 WPF WebBrowser 控件以重叠其中的所有网页内容?
【发布时间】:2012-03-02 02:30:10
【问题描述】:

我想要做的是当 WPF WebBrowser 加载页面时,我只想在页面内容上放置一些 以防止用户在下载的页面中发生任何点击事件

所以这个想法是以某种方式将包含它的样式插入到下载的页面中......

可以吗?

如果是,那么如何在 C# 中实现?

【问题讨论】:

  • 您是否尝试过在 WPF 中执行此操作?我会尝试将控件包装在一个网格中,并在 WebBrowser 处理点击事件上使用一个清晰​​的矩形。

标签: c# wpf webbrowser-control


【解决方案1】:

您能导航到javascript: 网址吗?这可能是一种便宜的方法,我相信这就是我过去最终做的事情。

还有另一种方式涉及直接访问 DOM。它涉及访问WebBrowser.Document,您可以将其转换为 COM 类型。我需要就确切的技术与您联系——我已经把它保存在某个地方了——但MSDN 上有一点提示。

编辑:

测试 JavaScript 的最简单方法是执行以下操作:

webBrowser.Navigate("javascript:alert('Test');")

如果您得到一个对话框说Test 而您的网页没有消失,它就可以工作。如果测试有效,您可以在其中插入任何您想要的 JavaScript。例如:

webBrowser.Navigate("javascript:void(document.body.innerHTML = '<div>Test</div>' + document.body.innerHTML);");

正确的方法

我将试一试,但它未经测试,因此请记住,您可能需要稍微调整此过程。

  1. 参考ShDocVw.dll
  2. mshtml 命名空间添加using 语句。
  3. WebBrowser.Document 对象转换为mshtml.IHTMLDocument2 接口。
  4. 这应该让您可以访问文档的 DOM,因此您应该能够使用 IntelliSense 从这里找出要做什么。不过,您将使用 COM,因此会有点麻烦,并且需要在接口方面进行大量工作。

编辑:This question 有一些很好的例子。不过,我会使用普通转换而不是 as 关键字。 obj as Somethingobj is Something ? (Something)obj : null 的语法糖。额外的测试在这里真的是不必要的。

【讨论】:

  • 我用“正确”的技术更新了我的答案。我只记得使用过一次,因为它很痛苦并且依赖于一个容易错位的 DLL。关于它的文档不多,但我确实找到了this
  • 非常感谢您的帮助,兄弟!
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2012-12-01
  • 2012-01-21
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多