在 WinUI 3.0 Preview 3 桌面应用程序的 WebView2 中从 post 获取响应

Get response from post in WebView2 in WinUI 3.0 Preview 3 Desktop App

在代码隐藏的构造函数中,我们从 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 Roadmap WebView2 应在 WinUI 3 Preview 3 中实现。

我应该能够阅读回复吗?如果是这样,我哪里错了?

如果您已注册 WebMessageReceived 事件但没有看到您的事件处理程序 运行 您可以检查以下内容:

  1. 确保在您加载的网页执行 chrome.webview.postMessage 之前注册 WebMessageReceived 事件。如果您在页面发布消息后注册事件处理程序,则不会触发事件处理程序。同样,您必须注意比赛。例如,如果您导航到一个在页面加载时执行 postMessage 的页面,然后注册 WebMessageReceived 事件,则无法保证哪个会先完成,您可能会也可能不会收到消息。
  2. 确保页面中的代码确实 运行ning chrome.webview.postMessage 并且成功。您可以使用 WebView2 中的 DevTools 在页面中的该行代码上放置一个断点,并验证它是否执行并且在 运行 执行该代码之前不会抛出异常。