如何将内联样式注入到正在加载的WPF web浏览器中的文档中?
本文关键字:WPF 加载 web 浏览器 文档 样式 注入 | 更新日期: 2023-09-27 18:03:58
我一直在尝试使用mshtml修改第三方web api。现在我正试图将两个元素的display属性更改为none,以便它们不可见。
我知道他们的id。
第一个是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
?
是的,你可以操作内联样式。
一个很好的方法是在使用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");
}
}
}