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

MAUI普通WebView在Windows调用EvaluateJavaScriptAsync遇CoreWebView2缺失求助

MAUI WebView在Windows平台调用EvaluateJavaScriptAsync抛出InvalidOperationException的解决办法

问题重现

在MAUI项目中,通过以下代码调用WebView执行JS获取SessionId:

private async void GetSessionIdFromWebView()
{
    sessionId = await webViewer.EvaluateJavaScriptAsync("MauiAppInterface.GetSessionId();");
}

对应的XAML使用普通WebView:

<WebView x:Name="webViewer" />

执行时WebView实例和Source均不为空,但仅Windows平台抛出异常:

System.InvalidOperationException: "A method was called at an unexpected time. ExecuteScriptAsync(): Failed because a valid CoreWebView2 is not present. Make sure one was created, for example by calling EnsureCoreWebView2Async() API."

原因分析

MAUI的WebView在Windows平台底层基于CoreWebView2(Edge Chromium内核)实现,但CoreWebView2的初始化是异步延迟进行的。如果在它完成初始化前调用EvaluateJavaScriptAsync,就会触发该异常。而Android/iOS平台的WebView实现逻辑不同,不存在这个初始化时机的限制。

解决方案

方法1:主动确保CoreWebView2初始化完成

针对Windows平台单独处理,先调用EnsureCoreWebView2Async完成初始化,再执行JS代码:

private async void GetSessionIdFromWebView()
{
#if WINDOWS
    var webView2 = webViewer.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2;
    if (webView2 != null && webView2.CoreWebView2 == null)
    {
        await webView2.EnsureCoreWebView2Async();
    }
#endif
    sessionId = await webViewer.EvaluateJavaScriptAsync("MauiAppInterface.GetSessionId();");
}

方法2:等待页面导航完成后执行JS

页面导航完成时,CoreWebView2通常已初始化完毕,可通过Navigated事件触发JS调用:
在XAML中添加事件绑定:

<WebView x:Name="webViewer" Navigated="WebViewer_Navigated" />

后台代码:

private bool _isSessionIdFetched = false;

private async void WebViewer_Navigated(object sender, WebNavigatedEventArgs e)
{
    // 避免重复执行
    if (_isSessionIdFetched) return;
    
    sessionId = await webViewer.EvaluateJavaScriptAsync("MauiAppInterface.GetSessionId();");
    _isSessionIdFetched = true;
}

注意事项

  • 不要在WebView构造函数或页面OnAppearing方法中直接调用EvaluateJavaScriptAsync,此时Windows端CoreWebView2大概率未完成初始化。
  • 即使加载本地HTML,也需等待CoreWebView2初始化完成,不能仅依赖Source是否设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:34