注意: 本文说的是WebBrowser控件,但对于所有新的.NET项目,主要解决方案是使用WebView2。欲了解更多信息,请参阅此帖子:
WebBrowser 控件
WebBrowser
控件使用已安装在您的操作系统上的同一版本 Internet Explorer,但默认情况下不使用最新的文档模式并以兼容模式显示内容。
症状 - 作为症状,在Internet Explorer或其他浏览器中网站正常工作,但WebBrowser
控件不能良好地显示该网站,对于某些网站它会显示脚本错误。
解决方案 - 您可以告诉WebBrowser
控件使用不带兼容模式的最新文档模式。您可以按照这里的说明使用注册表禁用设置。[参考: 浏览器仿真]
使用代码应用浏览器仿真设置
如果您想使用代码应用设置,请运行以下代码:
using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",
true))
{
var app = System.IO.Path.GetFileName(Application.ExecutablePath);
key.SetValue(app, 11001, Microsoft.Win32.RegistryValueKind.DWord);
key.Close();
}
在上述代码中,我使用了11001
表示IE11 Edge模式。
Internet Explorer 11。网页以IE11 Edge模式显示,无论声明了什么类型的指令。如果未声明指令,则页面将以Quirks模式加载。
手动应用浏览器仿真设置
打开注册表编辑器并浏览HKEY_CURRENT_USER
,转到以下键:
Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
添加以下数值:
"YourApplicationFileName.exe"=dword:00002af9
"YourApplicationFileName.vshost.exe"=dword:00002af9
(在旧版本的Visual Studio中,当您在Visual Studio中运行程序时,您需要添加vshost.exe值。)
要创建条目,请右键单击右窗格的空白区域,然后在选择dword
值后出现的窗口中,选择十六进制并输入2af9
:
![enter image description here](https://istack.dev59.com/nfjuq.webp)
在上述步骤中,我使用了11001
,这意味着IE11 Edge模式。
为Windows Forms使用WebViewCompatible控件
您还可以使用新的WebViewCompatible控件用于Windows Forms。您可以在此处查看使用简单的步骤:用Windows Forms的新WebView Compatible控件替换WebBrowser控件。
WebViewCompatible
使用两个渲染引擎之一来支持更广泛的Windows客户端:
在运行Windows 10的设备上,使用较新的Microsoft Edge渲染引擎来嵌入视图,从远程Web服务器、动态生成的代码或内容文件中呈现丰富格式的HTML内容。
在运行旧版Windows的设备上,使用System.Windows.Controls.WebBrowser,它提供基于Internet Explorer引擎的呈现。
注意:WebView2
是WebView
和WebViewCompatible
的替代品。
设置X-UA-Compatible元标记
如果您可以访问页面的html内容并且可以更改内容(例如它是一个本地html文件或网站属于您自己),那么您可以在中设置X-UA-Compatible
元标记,如:<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
。
使用其他浏览器控件
您可以依赖其他浏览器控件,比如CefSharp
。