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

WebView2 AddHostObjectToScript调用带参宿主方法提示参数错误如何解决

WebView2 带参数调用注入宿主对象报错解决方案

核心问题原因

该报错通常由COM类暴露不完整、参数编组规则不匹配、调用方式错误三类原因导致,可按以下步骤逐一排查修复:

1. 修正宿主类的COM暴露配置

仅标注[ComVisible(true)]无法完整暴露方法的参数签名到COM层,需要额外添加类接口配置:

[ComVisible(true)]
// 新增以下属性,自动公开类的方法、属性、参数签名到COM
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Bridge
{
    // 原有代码保持不变
    // 注意:如果用到BridgeAnotherClass类型,该类也需要添加[ComVisible(true)]和对应ClassInterface属性
}

2. 修正注入调用方式

不需要通过ICoreWebView2Interop底层接口注入,直接使用WebView2官方封装的注入方法,避免底层接口兼容性问题:

async void InitializeAsync()
{
    await webView.EnsureCoreWebView2Async();
    // 替换原有interop注入代码
    webView.CoreWebView2.AddHostObjectToScript("bridge", new Bridge());
}

3. 修正JS端调用方式

WebView2注入的宿主对象默认分为同步、异步两个调用分支:

  • 同步调用(推荐,无参数编组开销,适合简单方法调用):
result = window?.chrome?.webview?.hostObjects.sync.bridge.Func("John");
  • 异步调用(适合耗时方法):
    需要使用invoke方法显式传递参数,避免自动编组出错:
result = await window?.chrome?.webview?.hostObjects.bridge.Func.invoke("John");

4. 版本兼容性排查

如果使用的WinAppSDK版本低于1.1,存在已知的带参数宿主调用BUG,升级到WinAppSDK 1.1及以上稳定版即可修复。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:45:01