WebView2替代WebBrowser:如何加载HTML变量而非URL?
在WebView2中加载HTML字符串的解决方案
WebView2提供了两种直接加载内存中HTML字符串的方式,完全可以替代旧WebBrowser的用法:
方法1:使用NavigateToString(推荐)
这是WebView2专门为加载HTML字符串设计的API,用法简单直接。需要注意必须等WebView2的CoreWebView2实例初始化完成后再调用,否则会抛出异常。
示例代码(WPF):
// 窗口加载时提前初始化CoreWebView2 private async void MainWindow_Loaded(object sender, RoutedEventArgs e) { // 初始化WebView2核心 await webView2Control.EnsureCoreWebView2Async(); // 从数据库获取的HTML内容 string mailHtml = "<html><body><h3>邮件标题</h3><p>这是邮件正文的HTML内容</p></body></html>"; // 加载HTML字符串 await webView2Control.CoreWebView2.NavigateToString(mailHtml); }
示例代码(WinForms):
private async void Form_Load(object sender, EventArgs e) { await webView2Control.EnsureCoreWebView2Async(); string mailHtml = "<html><body>...</body></html>"; webView2Control.CoreWebView2.NavigateToString(mailHtml); }
方法2:使用Data URI通过Source属性加载
如果习惯用Source属性(和旧WebBrowser的用法对齐),可以把HTML字符串转换为data:text/html格式的URI,直接赋值给Source:
string mailHtml = "<html><body>邮件正文内容</body></html>"; // 转义HTML内容并构造Data URI string dataUri = $"data:text/html;charset=utf-8,{Uri.EscapeDataString(mailHtml)}"; webView2Control.Source = new Uri(dataUri);
注意事项
- 优先选择
NavigateToString,它更高效,且没有URI长度限制(Data URI在部分场景下有长度限制,但邮件正文一般不会触发)。 - 必须确保
CoreWebView2初始化完成,否则调用相关API会失败。可以通过EnsureCoreWebView2Async()主动触发初始化,或者监听CoreWebView2InitializationCompleted事件。
内容的提问来源于stack exchange,提问作者Angelo223
相关产品推荐
相关产品推荐

