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')