Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在向用户显示之前,是否在WebBrowser中更改HTML?_C#_Web_Browser - Fatal编程技术网

C# 在向用户显示之前,是否在WebBrowser中更改HTML?

C# 在向用户显示之前,是否在WebBrowser中更改HTML?,c#,web,browser,C#,Web,Browser,我使用的是WebBrowser控件,我希望在控件中显示HTML代码之前对其进行操作 例如,打开包含以下内容的网站: <html> <body> <p id="Text">Hello</p> </body> </html> 您好 我想换成 <html> <body> <p id="Text">Bye</p> </body> <

我使用的是WebBrowser控件,我希望在控件中显示HTML代码之前对其进行操作

例如,打开包含以下内容的网站:

<html>
  <body>
    <p id="Text">Hello</p>
  </body>
</html>

您好

我想换成

<html>
  <body>
    <p id="Text">Bye</p>
  </body>
</html>

再见


我知道我可以用DocumentCompleted事件来实现这一点,然后对其进行操作。但是,如果网站执行在Document ready事件中执行的JavaScript内容,则更改它是没有意义的,因为它已经被执行。

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

这将在文档中任何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>

试验

您好


当您在WebBrowser中显示此代码时,您将得到修改后的
Bye

这不起作用。我也面临同样的问题。如果要修改ajax调用,该怎么办?导航方法从不触发。此外,navigate方法从不在iFrame上激发

我认为唯一的解决办法是使用代理。只需单击AddNuGetPackages。搜索fiddlercore。添加对的引用后。现在只需在谷歌上搜索如何使用FiddlerCore修改响应。我相信会有很多例子

注意:在默认情况下启动fiddler core时,它将更改您的计算机代理设置。你不想那样!您只希望webbrowser控件连接到它,而不是整个系统。因此,初始化fidderlcore以在随机端口侦听,而不作为系统代理启动。然后将webbrowser控件设置为连接到该代理


尝试访问HTTPS站点时会变得更加棘手://

您可以使用合理的间隔(~20ms)在
setInterval
回调中执行此操作,然后在适当的时间清除间隔,例如在DOM就绪时


唯一需要注意的是回调函数必须是幂等函数,因为它会被多次调用。如果你只是简单地向已经修改过的DOM节点添加一个数据属性或类名,这样它们就不会再被修改,我不怀疑这会有什么困难。

你想在显示下载的HTML之前更改它,然后只显示更改过的代码,对吗?是的,这正是我想做的。.我喜欢这个想法。。但问题是,如果HTML文档稍大,WebBrowser控件不会立即读取所有内容,因此会调用导航事件,但它仍在加载页面。。
<html>
<head>
    <title>Test</title>
</head>
<body onload="document.getElementById('Text').innerHTML = document.getElementById('Text').innerHTML + ' modified';">
    <p id="Text">Hello</p>
</body>
</html>