我一直在尝试使用mshtml来修改第三方网络API。现在我正在尝试将两个元素的显示属性更改为无,因此它们将不可见。
我知道他们的身份。
第一个是img
,ID是zendbox_close
。第二个是div
,ID为zenbox_scrim
。
html看起来像这样
<div class="zenbox_header">
<img id="zenbox_close"></img>
</div>
...
<div id="zenbox_scrim...></div>
我想要做的就是添加一些内联样式,所以它看起来像这样
<div class="zenbox_header">
<img id="zenbox_close" style="display:none;"></img>
</div>
...
<div id="zenbox_scrim style="display:none;"...></div>
在我正在打开网页的WPF WebBrowser
的代码中,我已经走到了这一步:
IHTMLDocument3 doc = (IHTMLDocument3)this._browser.Document;
IHTMLImgElement element = (IHTMLImgElement)doc.getElementById("zenbox_close");
我在另一篇文章中看到有人在谈论注入脚本,他们说你可以使用
IHTMLElement scriptEl = doc.CreateElement("script");
我不确定与此类似的HTML元素是什么。另外,我必须使用IHTMLDocument3
来使用方法getElementById
,但该类似乎不包含与CreateElement()
类似的任何内容。
我的问题是如何在Document
WPF
中加载WebBrowser
内嵌样式?
答案 0 :(得分:1)
是的,您可以内联操作样式。
执行此操作的一种好方法是在使用IHTMLElement时使用IHTMLStyle或IHTMLCurrentStyle接口。与这两者所反映的价值存在一些差异,并且它们并不总是同步的。更好地解释为什么:
IHTMLStyle vs IHTMLCurrentStyle
代码示例如下:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
wb.LoadCompleted += wb_LoadCompleted;
wb.Source = new Uri("http://www.google.com");
}
void wb_LoadCompleted(object sender, NavigationEventArgs e)
{
var doc = wb.Document as HTMLDocument;
var collection = doc.getElementsByTagName("input");
foreach (IHTMLElement input in collection)
{
dynamic currentStyle = (input as IHTMLElement2).currentStyle.getAttribute("backgroundColor");
input.style.setAttribute("backgroundColor", "red");
}
}
}