在WebBrowser的DocumentCompleted事件中操作DOM时,jQuery的$(document).ready导致轻微闪烁

问题描述 投票:2回答:1

我正在使用WebBrowser c#抓取网站并在向用户显示之前对其进行操作。

例如,我希望隐藏当前网站的所有按钮。

我这样做是通过注入Javascript来实现的,但是我认为这已经太晚了,因为页面已经被渲染出来了,因此,在隐藏所有按钮之前,一个轻微的闪烁(闪烁的网站显示了所有按钮)。

(显示所有按钮 - > JavaScript .ready(function(){})注入执行 - >隐藏所有按钮)。

private void browser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
   string js = "$(document).ready(function() { hideButtons(); })";
   script = browser1.Document.createElement("script");
   script.SetAttribute("text", js);
   head.AppendChild(script);
}

上面的代码:JavaScript注入。

如何解决闪烁问题(当所有按钮显示快速时刻之后,在jQuery执行后将它们全部隐藏起来)?

我试图通过将DocumentCompleted设置为无“或”或者通过将css属性设置为OuterHtml来操纵display:none;方法中的DOM对象,但仍然存在这样轻微的闪烁。

private void browser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var b = browser1.Document.getElementById("btn1");
     b.OuterHtml = "";
}

有没有办法在呈现给用户之前操​​纵DOM对象?

我打什么活动?

javascript c# dom-manipulation
1个回答
0
投票

我唯一能想到的就是拦截导航功能,手动拉页面然后在浏览器窗口中呈现HTML。

private void browser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
   //Cancel the request
   e.Cancel = true;

   using (WebClient client = new WebClient())
   {
       string html = client.DownloadString(e.Url.ToString());

       //Find the text that you want to replace here and replace it

       browser1.DocumentText = html;
   }

}
© www.soinside.com 2019 - 2024. All rights reserved.