0

提前致谢。

我无法从 JavaScript 代码与嵌入在 WPF 应用程序中的 WebView2 控件进行通信,因为我看到诸如“访问被拒绝”、“承诺待定”等错误。我不确定什么是错误的,因为这里的一切似乎都是正确的。

这是我的一段代码:

COM 对象:

 [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class NativeMethods
    {        
        public string SendMessage(string message)
        {
            return message;
        }
    }

包含 WebView2 的 WPF 用户控件

 public partial class WebView2Control : UserControl
 {
   public WebView2Control()
   {
      InitializeAsync();
   }
    async void InitializeAsync()
    {
      await webView.EnsureCoreWebView2Async(null);
      WebView_CoreWebView2Ready();
    }

     private void WebView_CoreWebView2Ready()
     {
       webView.CoreWebView2.AddHostObjectToScript("nativeMethods", new NativeMethods());
     }               
}

开发工具中的 JavaScript 代码 在此处输入图像描述

4

1 回答 1

2

你能分享项目的运行版本吗?我尝试创建自己的新 C# WPF 应用程序并粘贴到您的部分代码中,但它似乎对我有用。

  • 对于尝试 1,我在 SendMessage 上有一个断点,当我从脚本调用 SendMessage 时,我看到断点命中。

  • 对于尝试 2,sync() 方法是一个异步方法,它会等到您调用它的代理完成后再完成自身并为您提供同步代理。所以你可能打算尝试代码 - 3。

  • 对于尝试 3,此代码也适用于我。如果我将其设置为WebView2.CoreWebView2.Settings.AreHostObjectsAllowedfalse我将获得与您在那里的输出相同的输出。确保该属性设置为true,否则页面中的脚本将无法访问通过AddHostObjectToScript.

另一个需要注意的问题是任何竞争条件。请确保您在完成后正在运行正在访问您的本机对象的脚本AddHostObjectToScript。在你的情况下,我猜你正在运行你列出的代码,然后打开开发工具并从控制台手动尝试不同的东西,所以这对你来说可能不是问题。

于 2020-08-03T18:05:17.553 回答