【问题标题】:WebView2 AddHostObjectToScript can't access function with parametersWebView2 AddHostObjectToScript 无法访问带参数的函数
【发布时间】: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 出错了。

标签: javascript c# .net angular webview2


【解决方案1】:

WebView2 当前存在一个问题,即 WinRT API 的互操作接口 AddHostObjectToScript 不适用于 .NET 对象。这是 WebView2 中的一个错误。

【讨论】:

    猜你喜欢
    • 2022-10-17
    • 2022-11-04
    • 1970-01-01
    • 2013-09-10
    • 2018-10-13
    • 1970-01-01
    • 2021-03-30
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多