简单调用本机功能,例如打印,获取硬件信息,获取本机用户名,拦截JS功能,拦截错误信息等等…
废话不多说先来截图
使用 JsBridge
JsBridge不科普了,同学们自行百度一下
using Microsoft.AspNetCore.Components.WebView;
using Microsoft.AspNetCore.Components.WebView.WindowsForms;
using Microsoft.VisualBasic.ApplicationServices;
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;
using System.Runtime.InteropServices;
using WebView2Control = Microsoft.Web.WebView2.WinForms.WebView2;
public partial class InitBlazorWebView
{
BlazorWebView _blazorWebView;
public InitBlazorWebView(BlazorWebView blazorWebView)
{
_blazorWebView = blazorWebView;
_blazorWebView.BlazorWebViewInitialized += BlazorWebViewInitialized;
}
void BlazorWebViewInitialized(object sender, BlazorWebViewInitializedEventArgs e)
{
//使用 JsBridge
InitializeBridgeAsync(e.WebView);
}
#region JsBridge
static BridgeObject obj = new BridgeObject();
/// <summary>
/// 自定义宿主类,用于向网页注册C#对象,供JS调用
/// </summary>
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class Bridge
{
public string Func(string param) => $"Func返回 {param} {obj.MacAdress}";
public string Print(object param) => $"Print返回 {param}";
public void PrintDemo(object param) => MessageBox.Show($"Print {param}");
public void Alert(string param) => MessageBox.Show(param);
public string GetUserName() => Environment.MachineName + "/" + Environment.UserDomainName + "/" + System.Windows.Forms.SystemInformation.UserName ;
}
public class BridgeObject
{
public string MacAdress => $"{DateTime.Now:G}";
}
async void InitializeBridgeAsync(WebView2Control webView)
{
webView.CoreWebView2.AddHostObjectToScript("bridge", new Bridge());
await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("var bridge= window.chrome.webview.hostObjects.bridge;");
await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync($"localStorage.setItem('macAdress', '{obj.MacAdress}')");
}
#endregion
}
Blazor测试组件
Tips: 不一定要在win端执行,在远端部署也可以的.
@using BootstrapBlazor.Components
<GroupBox Title="Bridge">
<Button Text="GetMacAdress&