WPF WebBrowser 控件是否取决于安装在用户机器上的 IE 版本,还是使用跨机器一致的单独库?我读过它只在 IE7 模式下呈现,但我想确保没有安装 IE 或由于某种原因仍在使用 IE6 的用户不会有任何问题。
2 回答
WebBrowser的MSDN 注释表明它重新托管了 IE ActiveX 控件:
WebBrowser 控件在内部实例化本机 WebBrowser ActiveX 控件。
WebBrowser ActiveX 控件更广为人知的是Shdocvw.dll
. 这反过来包装了Mshtml.dll
,可能还有其他 DLL 给您的环境。重新托管此控件的一个警告是它的 Browser Emulation 设置:
对于托管 WebBrowser 控件的应用程序,默认值为
7000
. 要使用注册表控制此功能的值,请将可执行文件的名称添加到以下设置中,并将值设置为与所需设置相匹配。
0x7000
表示IE7兼容模式。因此,如果您希望 WPF 应用程序使用其他模式呈现,则需要更新注册表,如改编自此示例:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"MyApplication.exe" = dword:2328
我在带有 IE11 的机器上创建了一个带有 WebBrowser 控件的 WPF 应用程序,并得到了这个用户代理字符串:
user agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 1.1.4322)
我在带有 IE10 的机器上创建了一个带有 WebBrowser 控件的 WPF 应用程序,并得到了这个用户代理字符串:
user agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Trident/7.0 表示 IE11,Trident/6.0 表示 IE10。有关用户代理字符串的更多信息。
带有 IE10 的系统的页面呈现方式也与带有 IE11 的系统不同。我还使用每个系统上的独立 IE 浏览器验证了这一点。
我还没有在没有 IE 的系统或运行 IE6 的系统上尝试过,但似乎 WebBrowser 控件与系统上当前安装的 IE 版本有关。