mshtml.HTMLDocument как скрыть динамически созданный div с атрибутом class

Я пытаюсь загрузить веб-страницу в элемент управления C# WebBrowser (WPF не WinForm). Наряду с другим содержимым на странице есть вращатель изображения, который динамически создает два элемента div, имеющих один и тот же класс, чтобы использовать вращение изображения. в LoadComplete event элемента управления WebBrowser Я прилагаю таблицу стилей, чтобы скрыть два 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>

И способ назначения CSS внутри события LoadComplete элемента управления webbrowser:

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

Но это, кажется, не работает, так как не скрывает div. Кто-нибудь, пожалуйста, дайте мне понять, что мне не хватает.

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;}";
    }
styleSheet.cssText = @".backgroundImageDivsClass{display:none !important;}";

Это мое предложение. Это заставит переопределить все остальное, пытаясь установить свойство display. (Как и элемент управления вращением изображения), потому что любые важные теги применяются последним DOM

Чтобы помочь, если это не работает..

Используйте плагин Firebug в Firefox, чтобы определить, какие атрибуты CSS применяются к вашему Div динамически.

Вы можете редактировать CSS-код Firebug в реальном времени, пока не найдете подходящее решение, а затем включите его в свое решение.

Эта статья хорошо дополняет мои предложения: http://www.smashingmagazine.com/2010/11/02/the-important-css-declaration-how-and-when-to-use-it/

Я считаю, что проблема заключается в том, что вы используете метод createStyleSheet в документе, а не в Document.DomDocument. Ответ здесь может быть полезной ссылкой.

Кроме того, как вы можете прочитать здесь, createStyleSheet больше не поддерживается. Начиная с Internet Explorer 11, вы должны использовать document.createElement ('style')

Другие вопросы по тегам