从 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

WinUI 3.0 桌面:文本框的背景颜色在鼠标悬停时更改

从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection

译宣告推出.NET Core 3.0 Preview 7(英雄的黎明)

十年再出发,Dubbo 3.0 Preview 即将在 3 月发布

Nacos 2.0 + Dubbo 3.0 Preview 即将发布,上海 Meetup 我们来了!