Cómo inyectar CSS en el control WebBrowser?

Según mi conocimiento, hay una forma de inyectar javascript en el DOM. A continuación se muestra el código de ejemplo que inyecta javascript con el control del webbrowser :

 HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; element.text = "function sayHello() { alert('hello') }"; head.AppendChild(scriptEl); webBrowser1.Document.InvokeScript("sayHello"); 

¿Hay alguna manera más fácil de inyectar CSS en el DOM?

No probé esto por mi cuenta, pero dado que las reglas de estilo CSS se pueden incluir en un documento usando la etiqueta

como en:

     

podrías intentar dar:

 HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; HtmlElement styleEl = webBrowser1.Document.CreateElement("style"); IHTMLStyleElement element = (IHTMLStyleElement)styleEl.DomElement; IHTMLStyleSheetElement styleSheet = element.styleSheet; styleSheet.cssText = @"h1 { color: red }"; head.AppendChild(styleEl); 

un ir. Puede encontrar más información sobre IHTMLStyleElement aquí .

Editar

Parece que la respuesta es mucho más simple de lo que originalmente pensé:

  using mshtml; IHTMLDocument2 doc = (webBrowser1.Document.DomDocument) as IHTMLDocument2; // The first parameter is the url, the second is the index of the added style sheet. IHTMLStyleSheet ss = doc.createStyleSheet("", 0); // Now that you have the style sheet you have a few options: // 1. You can just set the content as text. ss.cssText = @"h1 { color: blue; }"; // 2. You can add/remove style rules. int index = ss.addRule("h1", "color: red;"); ss.removeRule(index); // You can even walk over the rules using "ss.rules" and modify them. 

Escribí un pequeño proyecto de prueba para verificar que esto funciona. Llegué a este resultado final haciendo una búsqueda en MSDN para IHTMLStyleSheet, sobre el cual pasé a través de esta página , esta página y esta .