【问题标题】:WebView2 site not loadingWebView2 网站未加载
【发布时间】:2021-03-05 22:09:06
【问题描述】:

我已经下载并附加了 WebView2 的 FixedVersionRuntime.88.0.705.81.x64 并将其附加到我的项目中。

使用以下它应该加载必要的页面,但加载时 WebView 没有崩溃但没有加载页面:

public async Task InitializeAsync()
{
      string installPath = @"C:\Program Files (x86)\WebView2Runtime\Microsoft.WebView2.FixedVersionRuntime.88.0.705.81.x64\";
      var webView2Environment = await CoreWebView2Environment.CreateAsync(installPath);
      await browserControl.EnsureCoreWebView2Async(webView2Environment);
}

然后我在此之后设置源:

await InitializeAsync();
me.Source = new Uri(((MainViewModel)this.DataContext).Config.DefaultURL);

使用 evergreen 安装程序时,它运行良好,但在移动到固定版本时,它似乎在部署时无法正确加载。

【问题讨论】:

  • 根据文档,browserExecutableFolder 应该是“包含 WebView2 运行时的自定义版本的文件夹的相对路径”。您的路径是绝对路径。:docs.microsoft.com/en-us/dotnet/api/… 看来您使用的是 x64 固定版本,但将其放在 %ProgramFiles(x86)%
  • 我相信这个想法是,如果您使用固定版本,WebView2 文件将位于相对于(位于或低于)包含您的程序可执行文件的文件夹中。
  • 所以我将路径更改为相对路径并转换回 x86 版本,但没有运气。它很奇怪,因为它可以识别运行时的位置并且不会出错,但似乎没有加载默认页面或任何选择的页面。
  • 您的程序安装在哪里?除非您在其他位置指定 userDataFolder,否则它不能安装在 %ProgramFiles% 或 %ProgramFiles(x86)% 中。写入 %ProgramFiles% 或 %ProgramFiles(x86)% 需要管理员权限。
  • WebView2被称为“browserControl”还是“me”?不能两者兼有。

标签: c# wpf webview2


【解决方案1】:

我已经测试了以下,这似乎工作:

下载WebView2 Fixed Version

示例

鉴于

  • WebView2 固定版本:Microsoft.WebView2.FixedVersionRuntime.88.0.705.81.x86.cab
  • 项目文件夹:C:\Projects\WpfTestFixedVersion
  • 输出文件夹:C:\Projects\WpfTestFixedVersion\WpfTestFixedVersion\bin\Debug

项目编译使用:

  • 配置:调试
  • 平台:任何 CPU(首选 32 位)

从 .cab 中提取文件

  • 打开一个cmd窗口

cmd窗口

C:\Users\Test\Downloads> expand Microsoft.WebView2.FixedVersionRuntime.88.0.705.81.x86.cab -F:* "C:\Projects\WpfTestFixedVersion\WpfTestFixedVersion\bin\Debug"

注意:在上述命令中使用expand时,目标文件夹必须已经存在且名称不能以'\'结尾。

C:\Projects\WpfTestFixedVersion\WpfTestFixedVersion\bin\Debug

C:\Projects\WpfTestFixedVersion\WpfTestFixedVersion\bin\Debug\Microsoft.WebView2.FixedVersionRuntime.88.0.705.81.x86

选项 1

初始化异步

public async Task InitializeAsync()
{
    string installPath = @".\Microsoft.WebView2.FixedVersionRuntime.88.0.705.81.x86";
    var webView2Environment = await CoreWebView2Environment.CreateAsync(installPath);
    await browserControl.EnsureCoreWebView2Async(webView2Environment);
}

选项 2

注意:此选项允许指定 userDataFolder。如果未指定,它将使用用户的临时文件夹作为 userDataFolder 的位置。

初始化异步

public async Task InitializeAsync(WebView2 wv, string webCacheDir = "")
{
    CoreWebView2EnvironmentOptions options = null;
    string tempWebCacheDir = string.Empty;
    CoreWebView2Environment webView2Environment = null;

    //set value
    tempWebCacheDir = webCacheDir;

    if (String.IsNullOrEmpty(tempWebCacheDir))
    {
        //get fully-qualified path to user's temp folder
        tempWebCacheDir = System.IO.Path.GetTempPath();

        tempWebCacheDir = System.IO.Path.Combine(tempWebCacheDir, System.Guid.NewGuid().ToString("N"));
    }

    //use with WebView2 FixedVersionRuntime
    webView2Environment = await CoreWebView2Environment.CreateAsync(@".\Microsoft.WebView2.FixedVersionRuntime.88.0.705.81.x86", tempWebCacheDir, options);

    //webView2Environment = await CoreWebView2Environment.CreateAsync(@"C:\Program Files (x86)\Microsoft\Edge Dev\Application\90.0.810.1", tempWebCacheDir, options);
    //webView2Environment = await CoreWebView2Environment.CreateAsync(null, tempWebCacheDir, options);

    //wait for CoreWebView2 initialization
    await wv.EnsureCoreWebView2Async(webView2Environment);

}

【讨论】:

  • 非常感谢您提供的帮助。绝对路径没问题,但我将它从程序文件(x86)中移出并添加了一个临时目录,网站再次按预期加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多