从 WinUI 3.0 Preview 3 Desktop App 中 WebView2 中的帖子获取响应
Posted
技术标签:
【中文标题】从 WinUI 3.0 Preview 3 Desktop App 中 WebView2 中的帖子获取响应【英文标题】:Get response from post in WebView2 in WinUI 3.0 Preview 3 Desktop App 【发布时间】:2021-03-03 12:10:37 【问题描述】:在代码隐藏的 ctor 中,我们从 microsoft-ui-xaml-specs 复制了以下代码
MyWebView.WebMessageReceived += (WebView2 sender, WebView2WebMessageReceivedEventArgs args) =>
// Important to validate that the Uri is what we expect from that webview.
string uriAsString = sender.Source.ToString();
if (args.Source == uriAsString)
HandleWebMessageAsString(args.WebMessageAsString);
HandleWebMessageAsJson(args.WebMessageAsJson);
else
// If the source is not validated, don't process the message.
return;
;
编辑 1:在 WebView 导航到页面之前注册事件处理程序。 POST 不是我们页面的一部分。 POST 来自一个由外部服务注入我们页面的 javascript 实例化的按钮。
xaml
<WebView2
Name="MyWebView" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
/>
WebView2 可以正确导航和发布。我们在 WebView 中拥有该页面,并且我们知道该页面会收到响应。但是MyWebView.WebMessageReceived
没有被命中。
根据WinUI 3.0 Feature RoadmapWebView2应该在WinUI 3 Preview 3中实现。
我应该能够阅读回复吗?如果是这样,我哪里出错了?
【问题讨论】:
【参考方案1】:如果您已注册 WebMessageReceived 事件但没有看到您的事件处理程序运行,您可以检查以下内容:
-
确保在加载的网页执行
chrome.webview.postMessage
之前注册WebMessageReceived 事件。如果您在页面发布消息后注册事件处理程序,则事件处理程序不会触发。同样,您必须注意比赛。例如,如果您在页面加载时导航到执行 postMessage 的页面,然后注册 WebMessageReceived 事件,则无法保证哪个会先完成,您可能会或可能不会收到消息。
确保页面中的代码实际运行chrome.webview.postMessage
并成功运行。您可以使用 WebView2 中的 DevTools 在页面中的该行代码上放置一个断点,并验证它是否执行并且在运行该代码之前您没有引发异常。
【讨论】:
以上是关于从 WinUI 3.0 Preview 3 Desktop App 中 WebView2 中的帖子获取响应的主要内容,如果未能解决你的问题,请参考以下文章
WinUI 3.0 - 为啥 UWP 项目要求 MS Edge for Business 用于 WebView2
从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection
译宣告推出.NET Core 3.0 Preview 7(英雄的黎明)