如何将内联样式注入到正在加载的WPF web浏览器中的文档中?

本文关键字:WPF 加载 web 浏览器 文档 样式 注入 | 更新日期: 2023-09-27 18:03:58

我一直在尝试使用mshtml修改第三方web api。现在我正试图将两个元素的display属性更改为none,以便它们不可见。

我知道他们的id。

第一个是img, id是zendbox_close。第二个是div, id为zenbox_scrim

html是这样的

<div class="zenbox_header">
    <img id="zenbox_close"></img>
</div>
...
<div id="zenbox_scrim...></div>

我要做的就是添加一些内联样式使它看起来像这样

<div class="zenbox_header">
    <img id="zenbox_close" style="display:none;"></img>
</div>
...
<div id="zenbox_scrim style="display:none;"...></div>

在我打开网页的WPF WebBrowser后面的代码中,我已经得到了这个:

        IHTMLDocument3 doc = (IHTMLDocument3)this._browser.Document;
        IHTMLImgElement element = (IHTMLImgElement)doc.getElementById("zenbox_close");

我在另一个帖子中看到有人在谈论注入脚本,他们说你可以使用

IHTMLElement scriptEl = doc.CreateElement("script");

我不确定与此类似的HTML元素是什么。此外,我必须使用IHTMLDocument3来使用方法getElementById,但该类似乎不包含任何类似于CreateElement()的内容。

我的问题是如何注入内联样式到Document正在加载在我的WPF WebBrowser ?

如何将内联样式注入到正在加载的WPF web浏览器中的文档中?

是的,你可以操作内联样式。

一个很好的方法是在使用IHTMLElement时使用IHTMLStyle或IHTMLCurrentStyle接口。这两者所反映的价值观存在一些差异,而且它们并不总是同步的。一个更好的解释是:

IHTMLStyle vs IHTMLCurrentStyle

代码示例如下:

 public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        wb.LoadCompleted += wb_LoadCompleted;
        wb.Source = new Uri("http://www.google.com");          
    }
    void wb_LoadCompleted(object sender, NavigationEventArgs e)
    {
        var doc = wb.Document as HTMLDocument;
        var collection = doc.getElementsByTagName("input");
        foreach (IHTMLElement input in collection)
        {
            dynamic currentStyle = (input as IHTMLElement2).currentStyle.getAttribute("backgroundColor");
            input.style.setAttribute("backgroundColor", "red");                
        }

    }
}