【问题标题】:Alter Rendered Page in Webbrowser Control在 Web 浏览器控件中更改呈现的页面
【发布时间】:2011-01-06 07:20:03
【问题描述】:

有没有办法在 webbrowser 控件中更改呈现的 HTML 页面?我需要的是在我的 webbrowser 控件中更改呈现的 HTML 页面以突出显示选定的文本。

我所做的是使用 webclient 并使用 webclient.Downloadstring() 来获取页面的源代码,突出显示特定文本,然后在 webbrowser 中再次写入。问题是,与该页面一起的图像不会出现,因为它们被呈现为相对路径。

有没有办法解决这个问题?有没有办法检测网络浏览器控件中的图像?

【问题讨论】:

    标签: webbrowser-control


    【解决方案1】:

    不确定为什么需要将 HTML 更改为亮文本,为什么不使用 IHighlightRenderingServices?

    要在加载 HTML 字符串时指定一个基本 url,您需要使用文档的 IPersistMoniker 接口并在您的 IMoniker 实现中指定一个 url。

    【讨论】:

      【解决方案2】:

      我建议你换一种方式,使用 webbrowser 控件下载并替换文本,这样你的链接就可以工作了。您所做的就是将搜索文本框中的内容替换为以下内容,假设搜索词是“hello”,然后将所有出现的 hello 替换为以下内容:

      <font color="yellow">hello</font> 
      

      当然,此 HTML 可以替换为 SPAN 标签(这是 DIV 标签的内联版本,因此您的行不会使用 SPAN 中断,但会使用 DIV)。但无论哪种情况,这两个标签都有一个 style 属性,您可以使用 CSS 更改其颜色或与 CSS 兼容的无数其他属性,如下所示:

      <SPAN style="background-color: yellow;">hello</SPAN>
      

      当然,还有很多其他方法可以使用 HTML 更改颜色,如果需要,请随时在网上搜索更多信息。

      现在,您可以使用 dotnet 中的 .Replace() 函数来执行此操作(替换搜索到的文本),非常简单。因此,您可以使用 .DocumentText 将整个文档作为字符串获取,并且一旦所有出现的内容都被替换(使用 .Replace()),您可以将其设置回 .DocumentText(因此,您使用 .DocumentText 来获取原始文件字符串,并使用替换的字符串设置 .DocumentText)。当然,您可能不想对实际 HTML 中的项目执行此操作,因此您可以通过对所有元素执行 For Each 循环来遍历页面上的所有元素,如下所示:

      For Each someElement as HTMLElement in WebBrowser1.Document.All 
      

      每个元素都有一个 .InnerText/.InnerHTML 和 .OuterText/.OuterHTML,您可以获取(读取)和设置(用替换文本覆盖)。

      当然,根据您的需要,您可能只想替换和覆盖 .InnerText 和/或 .OuterText。

      如果您需要更多帮助,请告诉我。无论哪种情况,我都想知道它是如何为您解决的,或者我们是否可以做任何其他事情来为您的问题增加价值。干杯。

      【讨论】:

        猜你喜欢
        • 2016-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        • 2020-11-01
        • 2022-07-11
        • 1970-01-01
        相关资源
        最近更新 更多