mshtml.HTMLDocument如何使用class属性隐藏动态创建的div

时间:2015-01-08 06:12:28

标签: c# css mshtml microsoft.mshtml

我正在尝试在C#WebBrowser控件(WPF而不是WinForm)中加载网页。 与其他内容一起,页面具有图像旋转器,其动态地创建具有相同类的两个div以利用旋转的图像。 在WebBrowser控件的LoadComplete event中,我附加了一个样式表来隐藏两个div。 动态加载页面的两个div是:

<div class="backgroundImageDivsClass" style="
    width: 100%;
    height: 100%;
    position: fixed;
    top: 0px; 
    left: 0px;
    padding: 0px;
    margin: 0px;
    z-index: -9999;
    opacity: 1;
    background-image: url("data/767/Course/9214/1000000001_474030834.jpg"); 
    background-position: left top;
    background-size: 100% 100%;
    background-repeat: no-repeat;
"></div>
<div class="backgroundImageDivsClass"></div>

在webbrowser控件的LoadComplete事件中分配css的方式是:

mshtml.IHTMLStyleSheet styleSheet = Document.createStyleSheet(string.Empty, 0);
styleSheet.cssText = @".backgroundImageDivsClass{display:none;}";

但这似乎不起作用,因为它没有隐藏div。任何人请告诉我一些我不知道的事情。

3 个答案:

答案 0 :(得分:3)

这是我根据你的描述使用的方法,它工作正常。

   public MainForm()
   {
        InitializeComponent();

        webBrowser.DocumentCompleted += webBrowser_DocumentCompleted;
        var text = @"<html>
                        <body>
                            <div class=""backgroundImageDivsClass"">
                               <span> hello everyone!</span>
                            </div>
                        </body>
                     </html>";

        webBrowser.DocumentText = text;
    }

    void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        var doc = webBrowser.Document.DomDocument as IHTMLDocument2;
        var styleSheet = doc.createStyleSheet(string.Empty, 0);

        var ruleIndex = styleSheet.addRule(".backgroundImageDivsClass", "display:none", 0);//index can be used to remove the rule

        //styleSheet.cssText = @".backgroundImageDivsClass{display:none;}";
    }

答案 1 :(得分:2)

styleSheet.cssText = @".backgroundImageDivsClass{display:none !important;}";

是我的建议吗?它会强制覆盖任何试图设置display属性的东西。 (与图像旋转器控件一样)因为任何!重要标签最后由DOM

应用

如果这不起作用,请进一步帮助..

使用Firefox中的firebug插件,确定动态应用于Div的CSS属性。

您可以实时编辑firebug渲染的CSS,直到找到有效的解决方案,然后将其合并到您的解决方案中。

这篇文章很好地补充了我的建议: http://www.smashingmagazine.com/2010/11/02/the-important-css-declaration-how-and-when-to-use-it/

答案 2 :(得分:1)

我认为问题是你在Document上使用createStyleSheet方法而不是在Document.DomDocument上使用。 答案here可能是一个有用的参考。

另外,正如您可以阅读here不再支持createStyleSheet。从Internet Explorer 11开始,您应该使用 document.createElement(&#39; style&#39;)