【问题标题】:Webview2 AddHostObjectToScript throws Exception thrown at 0x7901179FWebview2 AddHostObjectToScript 在 0x7901179F 抛出异常
【发布时间】:2022-11-04 23:36:36
【问题描述】:

我有一个使用 WebView2 的测试 WinUI 3 应用程序,我希望能够从托管的 JavaScript 调用 C# 代码。

this documentation 之后,我有以下内容:

[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class Bridge
{
  public string Func(string param)
  {
   return "Example: " + param;
  }
}
...

   await MyWebView.EnsureCoreWebView2Async();
    
    MyWebView.CoreWebView2.SetVirtualHostNameToFolderMapping(
     "appassets", "assets", CoreWebView2HostResourceAccessKind.Allow);
    
    MyWebView.Source = new Uri("http://appassets/www/index.html");
    MyWebView.CoreWebView2.OpenDevToolsWindow();
    
    MyWebView.CoreWebView2.AddHostObjectToScript("bridge", new Bridge());

但是,对AddHostObjectToScript 的调用给了我:

在 WinUI3_1.exe 中的 0x7901179F (Microsoft.Web.WebView2.Core.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00000000。

更新 1

根据@Poul Bak 的建议,我将我的电话添加到NavigationCompleted,但不幸的是它没有帮助。

另外,我应该补充一点,我正在使用 VS2019,我通过管理扩展添加了对 WinUI3 的支持,所以希望我的错误不是由于这个。

【问题讨论】:

  • 我建议您尝试在NavigationCompleted 事件中设置主机对象。这样,当您设置主机对象时,页面就可以完全正常工作。
  • 编者注:peterc,你的问题很好。它们似乎具有适当的详细程度,因此它们看起来(乍一看)是可以回答的。然而,他们被一种有需要的、乞求的语气让他们失望了,这在这里通常是不鼓励的——技术写作是首选。事实上,一种讨好或恳求的语气does not generally improve answer rates,可能只会让你投反对票。
  • 你的问题似乎也有一个微妙的暗示,你想把工作包分发给人们——有人认识 X 吗?任何人都可以帮忙吗?这些都是其他人的行为。作为一名工程师,你最好相信你可以自己做,或者你会做大部分工作:如何让酒吧变得更好?我怎样才能弹出小部件?等等。您可能会发现,如果您披上自我实现的外衣,您可以解决的问题比您想象的要多,但此外,您的帖子也会得到更好的回应。
  • 注意到@PoulBak。为简洁起见,我现在将删除一个,当然问题作者在阅读它们时可以标记它们(NLN)。作为一名编辑,我发现鼓励作家保持内部风格的最有效方法是解释为什么我们有这些偏好。我向你保证,我宁愿没有必要!

标签: .net webview2 winui-3


【解决方案1】:

据我所知,使用 WebView2,我们只能授予对类的访问权限,而不能像使用 WebView 那样直接注入对象 (new Bridge())。我们必须在 web 端创建一个对象。

仅供参考 - Kristen Schauhttps://github.com/microsoft/microsoft-ui-xaml/issues/7170#issuecomment-1215910370 中为此提供了解决方案

以下是简短的解决方案:要授予访问权限,请按照 Microsoft 为 calling native-side WinRT code from web-side code 提供的指南中的步骤进行操作,并在步骤 6 之前进行以下更改:

  1. 添加CsWinRTnuget包到webview2_sample_uwp项目
  2. 将以下行添加到webview2_sample_uwpcsproj
      <PropertyGroup>
        <CsWinRTIncludes>WinRTAdapter</CsWinRTIncludes>
      </PropertyGroup>
    

【讨论】:

    猜你喜欢
    • 2022-10-17
    • 2021-11-25
    • 2013-05-24
    • 2012-01-24
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多