2015-01-08 17 views
5

Ich versuche, laden eine Webseite in C# WebBrowser Steuerelement (WPF nicht WinForm). Zusammen mit anderem Inhalt verfügt die Seite über einen Bildrotator, der dynamisch zwei Divs derselben Klasse erstellt, um das Bild rotierend zu verwenden. In der LoadComplete event des WebBrowser-Steuerelement ich ein Stylesheet anhängen, um die zwei divs zu verbergen. Die beiden divs erstellt dynamisch auf der Seite onload ist wie folgt vor:mshtml.HTMLDocument zum Ausblenden eines dynamisch erstellten DIV mit Klassenattribut

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

Und wie CSS innerhalb Loadcomplete-Ereignis des WebBrowser-Steuerelement zugeordnet ist:

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

aber dies scheint nicht funktioniert als nicht Versteckt die Divs. Irgendjemand bitte gib mir eine Idee, was ich vermisse.

Antwort

3

Dies ist die Methode, die ich basierend auf Ihren Beschreibungen verwendet habe und es funktioniert gut.

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;}"; 
    } 
+0

System.Windows.Controls.WebBrowser.Document keinen DomDocument – marifrahman

+0

Allerdings habe ich versucht, die addrule statt cssText ohne Glück. – marifrahman

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

Ist mein Vorschlag. Es wird erzwingen, alles zu überschreiben, das versucht, die Anzeigeeigenschaft festzulegen. (Wie der Bilddreher Steuerung), weil jeder! Important-Tags angewandt zuletzt durch den DOM

Um aide weiter, wenn dies nicht funktioniert ..

Verwenden Sie die Firebug-Plugin in Firefox, zu bestimmen, welche CSS-Attributen auf Ihre Div dynamisch angewendet.

Sie können den Firebug gerenderten CSS in Echtzeit bearbeiten, bis Sie eine Lösung gefunden haben, die funktioniert, und dann in Ihre Lösung integrieren.

Dieser Artikel, ergänzt meine Vorschläge gut: http://www.smashingmagazine.com/2010/11/02/the-important-css-declaration-how-and-when-to-use-it/

+0

Versuchte das ohne Glück. – marifrahman

+0

Auf Firebug habe ich die CSS-Regeln angewendet, sobald das Dokument geladen ist und es funktioniert gut dort. – marifrahman

+0

Ich habe meinen Post dort bearbeitet, es gab einen Tippfehler, da waren Sternchen in der Nähe wichtig, ive entfernte sie, probier es mal wieder Kumpel. – FlemGrem

1

Ich glaube, das Problem ist, dass Sie die Methode create auf dem Dokument und nicht auf dem Document.DomDocument verwenden. Die Antwort here kann eine nützliche Referenz sein.

Wie Sie auch lesen können here createStyleSheet wird nicht mehr unterstützt. Beginnend mit Internet Explorer 11 sollten Sie document.createElement verwenden (‚Stil‘)

+0

System.Windows.Controls.WebBrowser.Document hat kein DomDocument – marifrahman