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 无法访问带参数的函数的主要内容,如果未能解决你的问题,请参考以下文章

WebView2:如何启用密码自动填充?

是否有对 Webview2 控件的 ActiveX 支持

操作系统中未安装webview2

WebView2 - 桌面透明3D效果

如何在 Webview2 中使用透明度?

WebView2 中的搜索功能