You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF WebBrowser报错:‘Browser_LoadCompleted’无匹配委托重载

解决WPF WebBrowser控件的LoadCompleted事件不匹配及文本高亮问题

看起来你碰到了两个关联的问题:事件委托签名不匹配,以及HTML文档访问的编译报错。我来一步步帮你搞定:

1. 修复"No overload for 'Browser_LoadCompleted' matches delegate 'LoadCompletedEventHandler'"错误

这个问题的核心是你的事件处理方法签名不符合LoadCompletedEventHandler委托的要求。正确的方法必须包含两个参数:object类型的sender,和NavigationEventArgs类型的事件参数。

请把你的方法改成这样:

private void Browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    // 你的高亮逻辑写在这里
}

检查下是不是参数数量不对,或者误用了其他EventArgs子类,调整后这个错误应该就消失了。

2. 解决doc2.body.outerHTML标红的问题

标红是因为编译器无法识别doc2的类型和body.outerHTML属性,这里有两种可行的解决方式:

方式一:使用强类型(需要引用Microsoft.mshtml)

  1. 右键你的项目 → 选择「添加」→「引用」,在COM选项卡中找到并勾选Microsoft.mshtml,点击确定添加引用。
  2. 在代码里将WebBrowser的Document转换为IHTMLDocument2类型:
private bool isHighlighting = false; // 用来避免无限循环
private void Browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    if (isHighlighting)
    {
        isHighlighting = false;
        return;
    }

    WebBrowser targetBrowser = sender as WebBrowser;
    if (targetBrowser == null || targetBrowser.Document == null) return;

    mshtml.IHTMLDocument2 doc2 = targetBrowser.Document as mshtml.IHTMLDocument2;
    if (doc2 != null && doc2.body != null)
    {
        StringBuilder html = new StringBuilder(doc2.body.outerHTML);
        // 替换目标文本为带高亮样式的HTML
        html.Replace("你要高亮的文本", "<span style='background-color: yellow;'>你要高亮的文本</span>");
        
        isHighlighting = true;
        targetBrowser.NavigateToString(html.ToString());
    }
}

方式二:使用动态类型(无需额外引用)

如果不想添加COM引用,可以用dynamic类型让运行时自动解析属性:

private bool isHighlighting = false;
private void Browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    if (isHighlighting)
    {
        isHighlighting = false;
        return;
    }

    WebBrowser targetBrowser = sender as WebBrowser;
    if (targetBrowser == null || targetBrowser.Document == null) return;

    dynamic doc = targetBrowser.Document;
    if (doc.body != null)
    {
        StringBuilder html = new StringBuilder(doc.body.outerHTML);
        // 这里替换成你的高亮逻辑
        html.Replace("目标高亮文本", "<span style='background: #ffeb3b;'>目标高亮文本</span>");
        
        isHighlighting = true;
        targetBrowser.NavigateToString(html.ToString());
    }
}

额外注意点

  • 加isHighlighting标记是因为调用NavigateToString会再次触发LoadCompleted事件,不加会导致无限循环执行高亮逻辑。
  • 如果是加载外部网页,LoadCompleted是合适的操作时机;如果是本地HTML,也可以考虑在Navigated事件中处理。

内容的提问来源于stack exchange,提问作者Damian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:06:00