如何获取.NET MAUI WebView当前显示的HTML?官方文档无相关说明
获取.NET MAUI WebView当前显示的HTML的方法
可以获取WebView当前显示的HTML内容,核心是通过WebView执行JavaScript代码来实现,具体操作如下:
核心实现步骤
- 调用WebView的
EvaluateJavaScriptAsync方法,执行获取HTML的JS脚本,直接拿到当前页面的HTML字符串:
注意:返回的字符串会带有JSON转义符(如// 假设你的WebView控件实例名为MyWebView string fullPageHtml = await MyWebView.EvaluateJavaScriptAsync("document.documentElement.outerHTML"); // 若仅需body部分内容,可替换为: // string bodyHtml = await MyWebView.EvaluateJavaScriptAsync("document.body.innerHTML");\"),如需还原原始格式,可通过System.Text.Json.JsonSerializer.Deserialize<string>(fullPageHtml)处理。
针对JS动态修改后的获取场景
如果需要在JavaScript修改HTML内容后自动获取,可通过.NET与JS的双向通信实现:
- 在.NET端注册回调:
// 页面初始化时注册JS触发的回调 MyWebView.AddJavascriptChannel("HtmlUpdateChannel", jsValue => { // 收到JS通知后,立即获取最新HTML _ = Task.Run(async () => { string updatedHtml = await MyWebView.EvaluateJavaScriptAsync("document.documentElement.outerHTML"); // 此处处理HTML,提取所需元数据 }); }); - 在JS端触发通知:
当JS完成HTML修改后,调用以下代码通知.NET端:// 不同平台的调用方式略有差异,以下是通用兼容写法 if (window.chrome?.webview) { chrome.webview.postMessage("html_updated"); } else if (window.webkit?.messageHandlers?.HtmlUpdateChannel) { window.webkit.messageHandlers.HtmlUpdateChannel.postMessage("html_updated"); }
注意事项
- 确保WebView的
IsJavaScriptEnabled属性设置为true(默认启用),否则无法执行JS脚本。 - 需等待WebView页面加载完成或JS修改操作完成后再调用获取方法,避免返回空值或异常。
内容的提问来源于stack exchange,提问作者Dokug
相关产品推荐
相关产品推荐

