【发布时间】:2011-06-04 11:28:28
【问题描述】:
我最近升级到了 IE9-beta。现在,在我的 .Net (3.5) WinForm 应用程序中,我想使用 WebBrowser 控件。
所以我的问题是,WebBrowser 控件是否会展示 IE9 的所有属性和功能?
我担心的是,我想在上面渲染一些 SVG 图形。
【问题讨论】:
标签: c# .net-3.5 browser webbrowser-control internet-explorer-9
我最近升级到了 IE9-beta。现在,在我的 .Net (3.5) WinForm 应用程序中,我想使用 WebBrowser 控件。
所以我的问题是,WebBrowser 控件是否会展示 IE9 的所有属性和功能?
我担心的是,我想在上面渲染一些 SVG 图形。
【问题讨论】:
标签: c# .net-3.5 browser webbrowser-control internet-explorer-9
只是为了完整......
对于 32 位操作系统,您必须将注册表项添加到:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
*******或*******
对于 64 位操作系统,您必须将注册表项添加到:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
该条目必须是DWORD,名称是您的可执行文件的名称,它承载了Webbrowser 控件;即:
myappname.exe(不要使用 MSDN 网页中的“Contoso.exe”...它只是一个占位符名称)
然后根据上表给它一个DWORD 值:
http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation
我更改为十进制 11001 或十六进制 0x2AF9 ---(IE 11 EMULATION),因为这不是默认值(如果您安装了 IE 11 或任何版本)。
该 MSDN 文章包含有关影响 Internet Explorer Web 浏览器行为的其他几个注册表更改的注释。
【讨论】:
我知道这个帖子很旧,并且已经有全面的答案。
以防万一你不知道:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
您不必将 IE 版本号硬编码为
<meta http-equiv="X-UA-Compatible" content="IE=9" >
【讨论】:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >,则 webBrowser 将以最新的 IE 模式加载。为什么有 90 多票赞成 mikel 的回答?因为他的解决方案有效。如果可以更改网页,则无需更改注册表。
我遇到了同样的问题,这里的注册表答案不起作用。
我的程序的新版本中有一个浏览器控件,它在 XP 上运行良好,在 Windows 7(64 位)上失败。 旧版本可在 XP 和 Windows 7 上运行。
浏览器中显示的网页使用了一些奇怪的插件来显示旧的 SVG 地图(我认为它是一个 Java 小程序)。
原来问题与 Windows 7 中的 DEP 保护有关。
dotnet 2 的旧版本没有在 exe 中设置 DEP 所需标志,但从 dotnet 2、SP 1 开始,它确实设置了(是的,exe 的编译行为以及因此的运行时行为会根据您编译的机器而改变, 好的 ...)。
它记录在 MSDN 博客 NXCOMPAT and the C# compiler 上。引用:这无疑会让一些开发人员感到惊讶...下载框架服务包,重新编译,运行您的应用程序,您现在会遇到 IP_ON_HEAP 异常。
在 Visual Studio 的后期构建中添加以下内容,关闭 exe 的 DEP,一切都按预期工作:
all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
/headers 将在 exe 上显示 DEP 设置。【讨论】:
关于白鹰接受的答案。 我只是想增加一点动手经验。只是想添加一个 cmets,但 SO 抱怨它太长了。
基本上,如果没有安装 IE 9,注册表开关 FEATURE_BROWSER_EMULATION 将根本不起作用。
例如,今天我自己的经验是我试图让 .net webcontrol 在 IE10 模式下工作,因为我尝试渲染的一个 html 在 VS2012 下无法与 .netControl 一起工作,甚至在我加载html 到 IE8 直接,仍然 css 不会正确呈现(即使我说允许被阻止的内容)。但是我在朋友的win 8机器上用IE10测试了同样的html ok。这就是为什么我试图将 .net webControl 设置为 IE 10 模式但总是失败......
现在我认为这是因为我的 win 7 机器只安装了 IE8,所以无论我为 FEATURE_BROWSER_EMULATION 开关设置哪个值(值设置为 IE9,IE10 IE11),它根本无法工作!
然后我在我的 win 7 机器上下载并安装了 IE 10。仍然无法正常工作,然后我添加了 FEATURE_BROWSER_EMULATION,它开始工作了!
我还注意到,无论我设置哪个值,甚至默认将其设置为 0,webControl 仍在使用 IE 10 模式,这对我仍然有效。
总结一下, 如果您安装了 IE X,但希望您的 .Net webControl 在 IE (X+N) N>0 modo 下工作,两件事您需要做:
转到 MS 网站并在您的计算机上下载并安装 IE (X+N), 安装后需要重启。
应用白鹰的答案。
基本上: 要使用注册表控制此功能的值,请将可执行文件的名称添加到以下设置中,并将值设置为与所需设置相匹配。
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
contoso.exe = (DWORD) 00009000
Windows Internet Explorer 8 及更高版本。 FEATURE_BROWSER_EMULATION 功能定义了 Internet Explorer 的默认模拟模式,并支持以下值。
值说明
11001 (0x2AF9 Internet Explorer 11. 网页在 IE11 中显示 边缘模式,与 !DOCTYPE 指令无关。
11000 (0x2AF8) IE11。包含基于标准的 !DOCTYPE 的网页 指令以 IE11 边缘模式显示。 IE11 的默认值。
10001 (0x2711) Internet Explorer 10。网页在 IE10 中显示 标准模式,与 !DOCTYPE 指令无关。
10000 (0x02710) Internet Explorer 10. 包含的网页 基于标准的 !DOCTYPE 指令显示在 IE10 标准中 模式。 Internet Explorer 10 的默认值。
9999 (0x270F) Windows Internet Explorer 9. 网页显示在 IE9 标准模式,与 !DOCTYPE 指令无关。
9000 (0x2328) Internet Explorer 9. 包含的网页 基于标准的 !DOCTYPE 指令以 IE9 模式显示。 Internet Explorer 9 的默认值。
重要在 Internet Explorer 10 中,包含 基于标准的 !DOCTYPE 指令显示在 IE10 标准中 模式。
8888 (0x22B8) 网页以 IE8 标准模式显示, 无论 !DOCTYPE 指令如何。
8000 (0x1F40) 包含基于标准的 !DOCTYPE 指令的网页 以 IE8 模式显示。 Internet Explorer 8 的默认值 重要事项 在 Internet Explorer 10 中,包含 基于标准的 !DOCTYPE 指令显示在 IE10 标准中 模式。
7000 (0x1B58) 包含基于标准的 !DOCTYPE 指令的网页 以 IE7 标准模式显示。应用程序的默认值 托管 WebBrowser 控件。
完整参考here
【讨论】:
without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL. - 这是错误的。我只安装了IE8,我可以完美地使用开关将浏览器设置为不同的渲染模式。
我喜欢下面的 (C#) 代码,它为您的应用设置注册表设置。不确定它是否会在安装后切断它,但如果需要权限。对我来说,它解决了 WebSocket 在 WPF 中的 WebBrowser 控件中不可用的问题。
【讨论】:
我找到了这个解决方案,但它对我不起作用!因为我使用的是 64 位,所以我不得不更换注册表:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
而不是每个人都在谈论的那个:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
【讨论】:
WebBrowser 控件将使用您安装的任何版本的 IE,但出于兼容性原因,它将默认以 IE7 标准模式呈现页面。
如果您想利用新的 IE9 功能,您应该在 HTML 页面的 <head> 标记内添加元标记 <meta http-equiv="X-UA-Compatible" content="IE=9" >。
此元标记必须添加到 CSS、JavaScript 文件等的任何链接之前,这些链接也位于您的 <head> 中才能正常工作(只有其他 <meta> 标记或 <title> 标记可以在它之前)。
另一种方法是将注册表项添加到:
HKLM > 软件 > Microsoft > Internet Explorer > Main > FeatureControl > FEATURE_BROWSER_EMULATION
并在其中添加值为“9000”的“myApplicationName.exe”,以强制 WebBrowser 控件以 IE9 模式显示页面。虽然也有other values you can use too,但请注意,这些文档并不完全准确,因为无论您使用什么值,似乎都不可能让页面在 IE 8 模式下呈现。
将注册表项添加到 HKCU 中的同一路径而不是 HKLM 也可以 - 这很有用,因为写入 HKLM 需要管理员权限,而 HKCU 不需要。
【讨论】:
关于 64 位 Windows 的注释似乎让一些人感到困惑。 如果您的应用在 64 位 Windows 下运行,您可能需要在 [HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] 下设置 DWORD。
【讨论】:
我完全同意所提供的解决方案,但我认为一点澄清很重要,我认为可能是必要的。
对于需要使用提供的值添加 DWORD 的每个进程(另请阅读:vshost.exe、yourWinformApplication.exe.svchost 或您的 application.exe 的名称),在我的情况下,我留下 9000(十进制) 在应用程序名称中并运行平稳且无错误的脚本。
最常见的错误是认为有必要按原样添加“contoso.exe”并认为一切正常!
【讨论】:
WebBrowser控件的IE9“版本”和IE8版本一样,实际上是几个浏览器合二为一。与 IE8 版本不同,您可以通过更改 doctype 对页面内的呈现模式进行更多控制。当然,要更改浏览器模式,您必须像之前的答案一样设置注册表。这是 FEATURE_BROWSER_EMULATION 的 reg 文件片段:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"contoso.exe"=dword:00002328
这是完整的代码集:
完整文档:
http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
【讨论】:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 和 64 位 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION。
谢天谢地,我找到了这个。以下是极其重要的:
<meta http-equiv="X-UA-Compatible" content="IE=9" >
没有这个,我生成的所有报告都无法在安装 IE9 后工作,尽管在 IE8 中运行良好。它们会在 Web 浏览器控件中正确显示,但是当我调用 .Print() 时,会出现字母丢失、空格被抬高等情况。它们只是基本的 HTML,即使在 Mosaic 中也应该能够呈现。呵呵 不知道为什么 IE7 兼容模式会变得混乱。值得注意的是,您可以 .Print() 5 次相同的页面,并且每次都缺少不同的字母。它甚至会延续到 PDF 输出中,所以它绝对是浏览器。
【讨论】:
是的,WebBrowser 控件使用您安装的任何版本的 IE。这当然意味着,如果您在装有 IE 8 的机器上运行您的应用程序,那么您所依赖的 IE 9 功能将不可用。
【讨论】: