Получите ответ от публикации в WebView2 в настольном приложении WinUI 3.0 Preview 3

В 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, WebView2 должен быть реализован в WinUI 3 Preview 3.

Могу ли я прочитать ответ? Если да, то где я ошибся?

1 ответ

Решение

Если вы зарегистрировались для события WebMessageReceived, но не видите запущенного обработчика событий, вы можете проверить следующее:

  1. Убедитесь, что вы зарегистрировались для события WebMessageReceived, прежде чем загружаемая веб-страница выполнит chrome.webview.postMessage. Если вы зарегистрируете обработчик событий после того, как страница отправит сообщение, обработчик событий не сработает. Точно так же вы должны следить за гонками. Например, если вы переходите на страницу, которая выполняет postMessage во время загрузки страницы, а затем регистрируете событие WebMessageReceived, нет гарантии, что оно завершится первым, и вы можете получить или не получить сообщение.
  2. Убедитесь, что код на вашей странице действительно работает chrome.webview.postMessageи успешно. Вы можете использовать DevTools в WebView2, чтобы поставить точку останова в этой строке кода на вашей странице и убедиться, что она выполняется и что вы не генерируете исключение перед запуском этого кода.
Другие вопросы по тегам