You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebView2无AddWebAllowedObject方法,MAUI跨平台JS桥适配求助

.NET MAUI Windows WebView2 适配JS桥接方案

1. C#端对象暴露

使用WebView2的AddHostObjectToScript方法注册供JS调用的C#对象,需给类添加[ComVisible(true)]特性确保JS可访问:

[ComVisible(true)]
public class NativeBridge
{
    public string GetAppVersion()
    {
        return AppInfo.Current.VersionString;
    }

    public void ShowToast(string message)
    {
        // Windows端Toast实现逻辑
        ToastNotificationManagerCompat.CreateToastNotifier().Show(
            new ToastNotification(ToastContentBuilderFactory.CreateToastContentBuilder()
                .AddText(message)
                .GetToastContent()));
    }
}

// WebView2初始化完成后注册对象
webView.CoreWebView2InitializationCompleted += (s, e) =>
{
    if (e.IsSuccess)
    {
        webView.CoreWebView2.AddHostObjectToScript("nativeBridge", new NativeBridge());
    }
};

2. 注入JS适配层

在网页加载前注入适配脚本,将WebView2的异步Promise调用转为同步形式,对齐原UWP/Android端的调用逻辑:

webView.CoreWebView2InitializationCompleted += (s, e) =>
{
    if (e.IsSuccess)
    {
        var bridgeAdapterScript = @"
            window.nativeBridge = {
                GetAppVersion: function() {
                    return window.chrome.webview.hostObjects.sync.nativeBridge.GetAppVersion();
                },
                ShowToast: function(message) {
                    window.chrome.webview.hostObjects.sync.nativeBridge.ShowToast(message);
                }
            };
        ";
        webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(bridgeAdapterScript);
    }
};

核心是利用chrome.webview.hostObjects.sync实现同步调用,原网页的nativeBridge.GetAppVersion()等调用逻辑无需修改,即可和Android/UWP端保持一致。

3. 适配注意事项

  • C#方法尽量使用同步逻辑,若涉及异步操作,需在C#端处理完成后返回结果,避免JS端出现跨平台逻辑差异。
  • 传递复杂类型时,可通过JSON序列化/反序列化统一处理,保证各平台数据交互格式一致。
  • 若有特殊权限需求,可通过CoreWebView2Settings调整WebView2的访问权限配置。

内容的提问来源于stack exchange,提问作者Gert Hermans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:15:05