在 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 事件但没有看到您的事件处理程序 运行 您可以检查以下内容:
- 确保在您加载的网页执行
chrome.webview.postMessage
之前注册 WebMessageReceived 事件。如果您在页面发布消息后注册事件处理程序,则不会触发事件处理程序。同样,您必须注意比赛。例如,如果您导航到一个在页面加载时执行 postMessage 的页面,然后注册 WebMessageReceived 事件,则无法保证哪个会先完成,您可能会也可能不会收到消息。
- 确保页面中的代码确实 运行ning
chrome.webview.postMessage
并且成功。您可以使用 WebView2 中的 DevTools 在页面中的该行代码上放置一个断点,并验证它是否执行并且在 运行 执行该代码之前不会抛出异常。
在代码隐藏的构造函数中,我们从 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 事件但没有看到您的事件处理程序 运行 您可以检查以下内容:
- 确保在您加载的网页执行
chrome.webview.postMessage
之前注册 WebMessageReceived 事件。如果您在页面发布消息后注册事件处理程序,则不会触发事件处理程序。同样,您必须注意比赛。例如,如果您导航到一个在页面加载时执行 postMessage 的页面,然后注册 WebMessageReceived 事件,则无法保证哪个会先完成,您可能会也可能不会收到消息。 - 确保页面中的代码确实 运行ning
chrome.webview.postMessage
并且成功。您可以使用 WebView2 中的 DevTools 在页面中的该行代码上放置一个断点,并验证它是否执行并且在 运行 执行该代码之前不会抛出异常。