【发布时间】: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)。作为一名编辑,我发现鼓励作家保持内部风格的最有效方法是解释为什么我们有这些偏好。我向你保证,我宁愿没有必要!