在向用户显示之前更改WebBrowser中的HTML?

Rap*_*elH 28 c# browser web

我正在使用WebBrowser控件,我想在控件中显示之前操纵HTML代码.

例如,打开网站A,内容如下:

<html>
  <body>
    <p id="Text">Hello</p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我想改成它

<html>
  <body>
    <p id="Text">Bye</p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我知道我可以用DocumentCompleted事件做到这一点,然后操纵它.但是如果网站执行在Document ready事件上执行的JavaScript内容,那么更改它就没有意义,因为它已经被执行了.

Dar*_*rov 15

您可以在Navigated事件中执行DOM操作:

webBrowser1.Navigated += (sender, e) =>
{
    ((WebBrowser)sender).Document.GetElementById("Text").InnerHtml = "Bye";
};
Run Code Online (Sandbox Code Playgroud)

这将在文档中的任何DOM就绪处理程序之前执行.例如,如果您最初使用以下HTML:

<html>
<head>
    <title>Test</title>
</head>
<body onload="document.getElementById('Text').innerHTML = document.getElementById('Text').innerHTML + ' modified';">
    <p id="Text">Hello</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

当您在WebBrowser中显示此代码时,您将获得Bye modified.

  • 我喜欢这个想法..但问题是,如果HTML文档稍微大一点,WebBrowser控件不会立即读取所有内容,因此会调用导航事件,但它仍在加载页面. (2认同)