通过 WebView2 将对象从 .NET 设置为 JavaScript 代码 [英] Setting an object from .NET to JavaScript code through WebView2

查看:49
本文介绍了通过 WebView2 将对象从 .NET 设置为 JavaScript 代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

提前致谢,

我想将一个对象设置为包含在网页中的 java 脚本代码.我在 WPF 窗口中显示此网页,该窗口引用名称为webView"的 WebView2.

I want to set an object to the java script code which is contained within a WebPage. I am displaying this Web page in the WPF window that references the WebView2 with Name as 'webView'.

我对 WebView2 还很陌生,我不确定如何在 WebView2 SDK 的 AddHostObjectToScript() 方法中传递名称"和对象"

I am pretty new to WebView2 and I am not absolutely sure how to pass 'name' and 'object' in AddHostObjectToScript() method of WebView2 SDK

这是我尝试过的:

[ComVisible(true)]
public class ObjectHandle
{

  public Products(IPriceService priceDetails,IBillService billDetails)
  {  
     PriceDetails = priceDetails;
     BillDetails = billDetails;
  }

  public IPriceService PriceDetails { get; private set; }

  public IBillService  BillDetails { get; private set; }

}

public class WebViewBrowser:Window
{
   public WebViewBrowser()
   {
     InitializeComponent();
     InitializeAsync();
   }

   private void SetScriptingObject
   {
      ObjectHandle objHandle = new ObjectHandle(priceDetails,billDetails);
               
      webView.corewebview2.AddHostObjectToScript("ObjectHandle",objHandle );                                                                            
   }

   async void InitializeAsync()
   {
      await webView.EnsureCoreWebView2Async(null);
   }
}

推荐答案

好问题!我们计划更新我们的 C# 示例应用程序以展示如何使用 AddHostObjectToScript,因为它并不明显.

Great question! We plan to update our C# sample apps to show how to use AddHostObjectToScript as it is not obvious.

您打算与 AddHostObjectToScript 一起使用的类需要使用以下属性进行标记:

Classes that you intend to use with AddHostObjectToScript need to be marked with the following attributes:

[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class Example
{

    // Sample property.
    public string Prop { get; set; } = "example";
}

然后你调用 AddHostObjectToScript 就像你上面已经用你的类的一个实例做的那样,名称设置为你想从脚本调用你的对象的任何内容.

Then later you call AddHostObjectToScript like you're already doing above with an instance of your class and the name set to whatever you want to call your object from script.

webView.CoreWebView2.AddHostObjectToScript("example", new Example());

然后在脚本中,您可以通过 chrome.webview.hostObjects.{主机对象名称} 使用该对象:

Then in script you can use that object via chrome.webview.hostObjects.{name of host object}:

const example = chrome.webview.hostObjects.example;
const value = await example.Prop;

现在查看 C++ WebView2 文档示例代码如何在脚本中使用投影的宿主对象.我们将来应该为此添加更好的 .NET 文档.谢谢!

For now see the C++ WebView2 documentation and sample code for how to use projected host objects in script. We should add better .NET documentation for this in the future. Thanks!

这篇关于通过 WebView2 将对象从 .NET 设置为 JavaScript 代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆