WinUI3+C++/WinRT中WebView2调用NavigateToString无内容显示求助
问题描述
在WinUI 3 + C++/WinRT开发场景下,使用WebView2的NavigateToString方法加载字符串形式的HTML内容时,控件无任何内容显示,但使用Source方法加载Web URI却能正常渲染。数月前测试NavigateToString可正常运行,当前环境版本:
- Microsoft.Web.WebView2:1.0.6065.39
- Microsoft.WindowsAppSDK:1.6.250205002
相关代码示例:
使用NavigateToString的代码:
std::string htmlContent = R"( <html> <body> <h1>Hello world!</h1> </body> </html> )"; MyWebView.NavigateToString(winrt::to_hstring(htmlContent));
使用Source的代码:
Uri url(L"https://www.google.com"); MyWebView.Source(url);
可能的原因及解决方案
HTML字符串格式问题
你的HTML内容包含大量前置缩进和换行,旧版本WebView2运行时对这类格式化字符串可能出现解析异常。尝试移除多余的缩进与换行,改用紧凑格式:std::string htmlContent = R"(<html><body><h1>Hello world!</h1></body></html>)"; MyWebView.NavigateToString(winrt::to_hstring(htmlContent));WebView2初始化未完成
NavigateToString必须在WebView2控件完成核心初始化后调用,若在控件加载完成前执行会导致内容无法渲染。可通过监听CoreWebView2Initialized事件,确保初始化完成后再执行导航:MyWebView.CoreWebView2Initialized([this](auto const&, auto const&) { std::string htmlContent = R"( <html> <body> <h1>Hello world!</h1> </body> </html> )"; MyWebView.NavigateToString(winrt::to_hstring(htmlContent)); });版本兼容性bug
当前使用的WebView2 1.0.6065.39属于较旧的稳定版,可能存在与Windows App SDK 1.6的兼容性问题。尝试升级WebView2运行时到最新稳定版,或降级至之前验证可用的版本。字符串编码转换异常
winrt::to_hstring转换std::string时可能出现编码问题,建议直接使用std::wstring避免转换步骤:std::wstring htmlContent = LR"( <html> <body> <h1>Hello world!</h1> </body> </html> )"; MyWebView.NavigateToString(htmlContent);
内容的提问来源于stack exchange,提问作者Vicente Flich
相关产品推荐
相关产品推荐

