WPF WebBrowser 浏览器版本

Posted

技术标签:

【中文标题】WPF WebBrowser 浏览器版本【英文标题】:WPF WebBrowser Browser Version 【发布时间】:2012-05-11 06:45:54 【问题描述】:

WPF WebBrowser 控件是否依赖于安装在用户机器上的 IE 版本,还是使用跨机器一致的单独库?我读过它只在 IE7 模式下呈现,但我想确保没有安装 IE 或由于某种原因仍在使用 IE6 的用户不会有任何问题。

【问题讨论】:

【参考方案1】:

MSDN remarks for WebBrowser 表示它重新托管 IE ActiveX 控件:

WebBrowser 控件在内部实例化本机 WebBrowser ActiveX 控件。

WebBrowser ActiveX 控件更广为人知的是Shdocvw.dll。这反过来包装Mshtml.dll,可能还有其他DLL 给您的环境。 One caveat of rehosting this control is its setting for Browser Emulation:

对于托管 WebBrowser 控件的应用程序,默认值为 7000。要使用注册表控制此功能的值,请将可执行文件的名称添加到以下设置中,并将值设置为与所需设置相匹配。

0x7000 表示 IE7 兼容模式。因此,如果您希望 WPF 应用程序使用其他模式呈现,则需要更新注册表,如 adapted from this example:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] 
"MyApplication.exe" = dword:2328

【讨论】:

另一个有用的资源是this blog post from Rick Strahl as he faced the issue when working with his Html Help Builder。 问题是,“WPF WebBrowser 控件是否依赖于系统上安装的 IE 版本?”这个答案刚刚谈到了如何设置或覆盖 IE7 仿真。如果用户没有在他们的机器上安装 IE 或有 IE6,会发生什么? 我创建了这个基本的网页,告诉你 IE 运行的兼容模式:documentmode.000webhostapp.com【参考方案2】:

我在一台装有 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。 More about user-agent strings.

使用 IE10 的系统的页面呈现方式也与使用 IE11 的系统不同。我还使用每个系统上的独立 IE 浏览器验证了这一点。

我还没有在没有IE的系统或运行IE6的系统上尝试过,但是WebBrowser控件似乎与系统上当前安装的IE版本有关。

【讨论】:

以上是关于WPF WebBrowser 浏览器版本的主要内容,如果未能解决你的问题,请参考以下文章

WebBrowser控件是浏览器啥版本

WPF 修改Webbrowser的IE版本小程序(32位)

WebBrowser引用IE版本问题,更改使用高版本IE

解决Delphi WebBrowser 无法调用当前浏览器的版本

WPF 修改Webbrowser的IE版本小程序(32位)

调整WebBrowser的默认浏览器内核版本