如何将内联样式注入到我的WPF WebBrowser中加载的文档中?

时间:2014-05-19 14:38:20

标签: c# html css wpf mshtml

我一直在尝试使用mshtml来修改第三方网络API。现在我正在尝试将两个元素的显示属性更改为无,因此它们将不可见。

我知道他们的身份。

第一个是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内嵌样式?

1 个答案:

答案 0 :(得分:1)

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

执行此操作的一种好方法是在使用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");                
        }



    }
}