WebView2 AddHostObjectToScript 无法访问带参数的函数
Posted
技术标签:
【中文标题】WebView2 AddHostObjectToScript 无法访问带参数的函数【英文标题】:WebView2 AddHostObjectToScript can't access function with parameters 【发布时间】:2021-11-25 04:41:43 【问题描述】:我一直在关注微软官方网站上关于 webview2 的文档,但我遇到了一个不知道如何解决的问题。
我使用 AddHostObjectToScript 添加了一个 .NET 对象,只要该函数没有参数,它就可以工作。在 JS 中调用有参数的对象函数时,一直报“参数不正确”的错误。
这就是我在 Angular 应用程序中调用主机对象的方式:
result = await window?.chrome?.webview?.hostObjects.bridge.Func("John");
这是来自我的 WinUI 3.0 应用程序:
[ComVisible(true)]
public class Bridge
public string Func(string param)
return "Example: " + param;
public string Sample()
return "Example: ";
public BridgeAnotherClass AnotherObject get; set; = new BridgeAnotherClass();
// Sample indexed property.
[System.Runtime.CompilerServices.IndexerName("Items")]
public string this[int index]
get return m_dictionary[index];
set m_dictionary[index] = value;
private Dictionary<int, string> m_dictionary = new Dictionary<int, string>();
public sealed partial class WebViewPage : Page
public WebViewViewModel ViewModel get;
public WebViewPage()
ViewModel = Ioc.Default.GetService<WebViewViewModel>();
InitializeComponent();
ViewModel.WebViewService.Initialize(webView);
webView.WebMessageReceived += getMsg;
InitializeAsync();
async void InitializeAsync()
await webView.EnsureCoreWebView2Async();
var interop = webView.CoreWebView2.As<ICoreWebView2Interop>();
interop.AddHostObjectToScript("bridge", new Bridge());
【问题讨论】:
我使用了sync
版本的网桥。尝试这样调用:result = window?.chrome?.webview?.hostObjects.sync.bridge.Func("John");
我没有得到错误,但仍然没有得到返回值。这是一个 WinForms 应用程序。 WebView2 运行时 96.0.1054.34
这确实有效。我的 javascript 出错了。
【参考方案1】:
WebView2 当前存在一个问题,即 WinRT API 的互操作接口 AddHostObjectToScript 不适用于 .NET 对象。这是 WebView2 中的一个错误。
【讨论】:
以上是关于WebView2 AddHostObjectToScript 无法访问带参数的函数的主要内容,如果未能解决你的问题,请参考以下文章