我已经弄清楚如何在页面加载完成后立即将所有内容变为红色:
private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
var doc = (IHTMLDocument2)webBrowser1.Document;
foreach (IHTMLElement elem in doc.all)
{
elem.style.backgroundColor = "#ff0000";
}
}
现在,如果我想让元素仅在单击时改变颜色怎么办?我看到 elem
有一个 onclick
属性,但它的类型是 dynamic
所以我不知道如何处理它。 documentation非常没用。
最佳答案
您可以使用 HTMLDocumentClass
而不是 IHTMLDocument2
接口(interface)来实现:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)webBrowser1.Document;
doc.HTMLDocumentEvents_Event_onclick += new mshtml.HTMLDocumentEvents_onclickEventHandler(OnClickHandler);
}
bool OnClickHandler()
{
mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)webBrowser1.Document;
mshtml.IHTMLWindow2 win = doc.parentWindow;
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2f584641016f4a594a415b015c5d4c6a434a424a415b015c5b56434a014d4e4c44485d405a414b6c4043405d" rel="noreferrer noopener nofollow">[email protected]</a> = "#ff0000";
return false;
}
}
上述解决方案有一个缺点:即使返回了 false
,onclick
事件也不会冒泡(即单击超链接不会导航到其他页面)。
关于WPF 网页浏览器 : How to set element click event?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4689265/