我正在尝试在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。任何人请告诉我一些我不知道的事情。
答案 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)