输出 this.webbrowser.this client versionn 显示版本是IE11的,但实际版本不是啊!

2989人阅读
HTML&CSS(21)
JQuery(14)
用$.browser.version经常出现一些不准确的状况,最近碰到,做了一些总结,不知道是否全面。
用javasript的navigator.userAgent.indexOf(&MSIE 8.0&)取法结果是一样的。
1、用webbrowser加载htm、html页面,此时加载后获取IE的版本就是不准确的,比如我的机器是IE9,但是通过webbrowser加载之后,$.browser.version方法取得的版本便是变成了7.0,用“&meta http-equiv=&x-ua-compatible& content=&IE=5;IE=7;IE=8;IE=9;&/&”强制解析后取得的版本依然是7.0,如果想要webbrowser取得正确的结果还是要修改注册表。
此种问题的解决方案是:在后台通过注册表获取:
private int GetIEVersion()
using (Microsoft.Win32.RegistryKey versionKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@&Software\Microsoft\Internet Explorer&))
string version = versionKey.GetValue(&Version&).ToString();
int iVersion = int.Parse(version.Substring(0, 1));
2、用“&meta http-equiv=&x-ua-compatible& content=&IE=5;IE=7;IE=8;&/&”强制解析,我的机器是IE9,添加此标签之后,再$.browser.version获得的版本是8.0。
3、嵌套Iframe的状况,如果外层是IE8解析,内层是IE9解析,这样内层获取的版本是IE9,但是实际上页面是按照IE8来解析,这样就会造成判断和实际的执行不符合。
此种情况应用应该比较少,如果遇到需通过内外层解析同时判断方可解决。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:736054次
积分:9435
积分:9435
排名:第1188名
原创:220篇
转载:48篇
评论:194条
文章:20篇
阅读:95015
文章:23篇
阅读:56748
文章:20篇
阅读:45161
(3)(1)(3)(1)(2)(1)(3)(3)(2)(2)(6)(8)(1)(14)(5)(2)(5)(3)(9)(8)(10)(8)(4)(10)(17)(8)(9)(1)(8)(8)(9)(8)(9)(5)(5)(4)(20)(13)(14)(16)(1)& 有关于"" 的文章列表
调整.NET控件WebBrowser的默认浏览器内核版本
调整.NET控件WebBrowser的默认浏览器内核版本
今天在调试程序的时候,需要使用C#的客户端远程登录一个Web页面,用到了WebBrowser控件。但是却发现了一件很神奇的事情:
当前浏览器使用的内核,可以通过访问下面这个网站获取:/
我的IE版本为IE8,在使用IE登录页面的时候,使用的内核是IE8,登录该网站的截图如下:
但是当我用WebBrowser登录该页面时,显示使用的内核却是IE7:
上图的程序是一个测试程序,仅包含一个WebBrowser,这个程序的名称是TestWebBrowser.exe。可以发现,虽然同为Trident内核,但在WebBrowser控件中使用的内核版本却与IE不一样,这让我感到疑惑。因为我要登录的页面是针对IE8以上版本开发的,因此我需要尝试让程序内的WebBrowser以IE8的内核登录网页。
在网上找了一些资料后,我发现可以通过下面这个办法来解决:
1、在开始菜单内输入“regedit.exe”,进入注册表编辑器
2、找到注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
3、在右侧空白区域内单击鼠标右键,点击【新建】→【DWORD(32-位)值】
4、新建的项取名为TestWebBrowser.exe,编辑值时,选择基数“十进制”,填写数值数据,这里填写8888
5、这个时候再进入Debug目录下生成好的TestWebBrowser,可以看到登录的内核版本变成IE8了!
需要注意的是,在VS内以调试的方法进入程序,打开的程序实际上是TestWebBrowser.vshost.exe,并不能看到效果,必须要打开Debug目录下的TestWebBrowser.exe,才能发现内核版本的改变。之前WebBrowser使用IE7内核的原因,就是.NET中的WebBrowser控件默认使用了IE7兼容性模式来浏览网页。
一一一一一一一一一分割线一一一一一一一一一
上面这个方法依靠修改注册表来完成WebBrowser使用内核的变更,不过光知道新建一个注册表项并把值设置为“8888”还远远不够,本着“知其然还要知其所以然”的想法,我查阅了相关的MSDN页面:/en-us/library/eev=vs.85%29.aspx
这个页面的标题是:Internet Feature Controls (B..C),即互联网功能控制,我们要找的章节是“Browser Emulation”(浏览器仿真)。原来自从IE8以后,在注册表中添加了FEATURE_BROWSER_EMULATION功能,这个功能是用来定义IE默认的仿真模式。
这个功能在注册表中的位置如下:
该注册表项的各可能取值描述如下(原文见MSDN,纯手工翻译,如有不足之处欢迎指出)
Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.
包含标准!DOCTYPE指令的页面将会以IE7兼容模式打开。WebBrowser控件的默认值。
Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8Important& In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
包含标准!DOCTYPE指令的页面将会以IE8兼容模式打开,IE8浏览器的默认值。对于IE10来说,包含标准!DOCTYPE指令的页面会以IE10兼容模式打开。
Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
无论是否声明!DOCTYPE指令,页面以IE8兼容模式打开。对于未正确声明!DOCTYPE指令的页面,将会以怪异模式(quirks mode)加载。
Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.Important& In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
IE9,包含标准!DOCTYPE指令的页面将会以IE9兼容模式打开,IE9浏览器的默认值。对于IE10来说,包含标准!DOCTYPE指令的页面会以IE10兼容模式打开。
Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
IE9,无论是否声明!DOCTYPE指令,页面以IE9兼容模式打开。对于未正确声明!DOCTYPE指令的页面,将会以怪异模式(quirks mode)加载。
Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
IE10,包含标准!DOCTYPE指令的页面将会以IE10兼容模式打开,IE10浏览器的默认值。
Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.
IE10,无论是否声明!DOCTYPE指令,页面以IE10兼容模式打开。
IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.
IE11,包含标准!DOCTYPE指令的页面将会以IE11兼容模式打开,IE11浏览器的默认值。
Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
IE11,无论是否声明!DOCTYPE指令,页面将会以IE11的edge模式打开。对于未正确声明!DOCTYPE指令的页面,将会以怪异模式(quirks mode)加载。相关文章推荐:
delphi webbrowser ie版本
  在最新的Win8.1的常规更新中,ie11浏览器的软件版本号从11.0升级至11.0.1,补丁名称“MS13-088:ie累积安全升级。此
补丁升级包含在微软常规的Patch Tuesday更新中,本次的Patch Tuesday包含了17个BUG修复以及1个单独的常规安全更新包,fgsj1118其
中包含了如对Adobe Flash Player的更新。
  ie11浏览器
  本 次的更新内容包含了一个在ie11中默认禁用高级保护模式(Enhanced Protected Mod...
阅读(0) 回复(0)
其他文章推荐
Dim WebhWnd&
Public Sub FindWebPage(ByVal hParentWnd As Long)
Dim strClassName As String * 30
Dim hTempWnd As Long
hTempWnd = GetWindow(hParentWnd, GW_CHILD)
Do While (hTempWnd && 0)
strClassName = &&
GetClassName hTempWnd, strClassName, 30
If left(strClassName, Len(&Internet Explorer_Server&)) =...
Windows平台
阅读(0) 回复(0)
在自己的程序中使用 CHtmlView 或直接嵌入 webbrowser 控件显示网页时,常常需要获取网页元素的一些事件,以实现对网页显示的控制或与网页元素进行交互。最常见的莫过于获取用户对网页上超链接的所有点击事件。要实现这个需求,在 MSDN 中描述了接收网页元素事件的基本方法,但这篇文章的一些细节语焉不详,让人摸不着头脑。在 CodeProject 这篇文章中提出了一种替代的方法,但是存在一些小的限制。本文详细演示了如何实现在 CHt...
Windows平台
阅读(30) 回复(0)
在使用gentoo安装软件时,有时候需要指定USE,因此经常会修改/etc/portage/package.use文件,此中经常会看到软件包前面有大于号(&)等号(=)等,一直不知道什么意思,今天查了一下,原来是版本说明符号。
简单来说,大于(&)表示版本高于当前版本。等于(=)表示当前版本。还有一些其他的指定,不多说明了,下面的链接有详细的说明。
https://wiki.gentoo.org/wiki/Version_specifier
gentoo的版本指定可以使用通配符,貌似不仅如此,...
阅读(60) 回复(0)
amqsget 队列名称 队列管理器
这几天解决仿真连接mq的问题。一直报2058的错误。
一连搞了几天,才明白。mq分为server和client。
delphi调用的时候server调用mqm.dll,client调用mqic32.dll.
如果是仿真连接mq在本地,模拟服务端,那么需要调用mqm.dll,只需要制定队列管理器名称和队列名称。
如果模拟客户端,需要IP和端口,还有消息通道。
连接实例:
procedure TForm1.Button1Click(Sender: TObject);
CompCode, Reason:...
阅读(90) 回复(0)
RAD Studio XE5 目前最新版(with Update 1) v19.0. 官方 ISO 文件下载(4.67GB):
/download/radstudio/xe5/delphicbuilder_xe5_upd1_win.iso
RAD Studio XE5 v19.0. 官方 ISO 文件下载(4.63GB):
/download/radstudio/xe5/delphicbuilder_xe5_win.iso
RAD Studio XE4 最终版(with Update 1) v18.0. 官方 ISO 文件下...
阅读(750) 回复(0)
Private Sub Form_Load()
webbrowser1.Navigate &&
Private Sub webbrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
On Error Resume Next
js = &document.body.oncontex...
Windows平台
阅读(0) 回复(0)
Function EncrypKey (Src:S Key:String):
TmpSrcAsc :I
Windows平台
阅读(30) 回复(0)
如何用delphi 向网页传递数据
delphi / Windows SDK/APIhttp://www.delphi2007.net/delphiNetwork/html/delphi_34114.html
比如实现这种样式的提交
/jieshou.asp?user=1221&id=12
webbrowser1:
Twebbrowser;
TForm1.Button1Click(Send...
阅读(90) 回复(0)
nit Unit1;
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
TForm1 = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TO var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
{ Private decla...
阅读(450) 回复(0)
http://blog.csdn.net/fancyerii/article/details/7237565http://linux.thai.net/~thep/datrie/datrie.html#AnImphttp://www.chokkan.org/software/dastrie/
阅读(0) 回复(0)
盛拓传媒:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
ITPUB推荐文章解答你所有技术难题调整.NET控件WebBrowser的默认浏览器内核-爱编程
调整.NET控件WebBrowser的默认浏览器内核
今天在调试程序的时候,需要使用C#的客户端远程登录一个Web页面,用到了WebBrowser控件。但是却发现了一件很神奇的事情:
当前浏览器使用的内核,可以通过登录下面这个网站获取:/
我的IE版本为IE8,在使用IE登录页面的时候,使用的内核是IE8,登录该网站的截图如下:
但是当我用WebBrowser登录该页面时,显示使用的内核却是IE7:
上图的程序是一个测试程序,仅包含一个WebBrowser,这个程序的名称是TestWebBrowser.exe。可以发现,虽然同为Trident内核,但在WebBrowser控件中使用的内核版本却与IE不一样,这让我感到疑惑。因为我要登录的页面是针对IE8以上版本开发的,因此我需要尝试让程序内的WebBrowser以IE8的内核登录网页。
在网上找了一些资料后,我发现可以通过下面这个办法来解决:
1、在开始菜单内输入“regedit.exe”,进入注册表编辑器
2、找到注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
3、在右侧空白区域内单击鼠标右键,点击【新建】→【DWORD(32-位)值】
4、新建的项取名为TestWebBrowser.exe,编辑值时,选择基数“十进制”,填写数值数据,这里填写8888
5、这个时候再进入Debug目录下生成好的TestWebBrowser,可以看到登录的内核版本变成IE8了!
需要注意的是,在VS内以调试的方法进入程序,打开的程序实际上是TestWebBrowser.vshost.exe,并不能看到效果,必须要打开Debug目录下的TestWebBrowser.exe,才能发现内核版本的改变。之前WebBrowser使用IE7内核的原因,就是.NET中的WebBrowser控件默认使用了IE7兼容性模式来浏览网页。
一一一一一一一一一分割线一一一一一一一一一
上面这个方法依靠修改注册表来完成WebBrowser使用内核的变更,不过光知道新建一个注册表项并把值设置为“8888”还远远不够,本着“知其然还要知其所以然”的想法,我查阅了相关的MSDN页面:/en-us/library/eev=vs.85%29.aspx
这个页面的标题是:Internet Feature Controls (B..C),即互联网功能控制,我们要找的章节是“Browser Emulation”(浏览器仿真)。原来自从IE8以后,在注册表中添加了FEATURE_BROWSER_EMULATION功能,这个功能是用来定义IE默认的仿真模式。
这个功能在注册表中的位置如下:
该注册表项的各可能取值描述如下(原文见MSDN,纯手工翻译,如有不足之处欢迎指出)
Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.
包含标准!DOCTYPE指令的页面将会以IE7兼容模式打开。WebBrowser控件的默认值。
Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8Important& In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
包含标准!DOCTYPE指令的页面将会以IE8兼容模式打开,IE8浏览器的默认值。对于IE10来说,包含标准!DOCTYPE指令的页面会以IE10兼容模式打开。
Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
无论是否声明!DOCTYPE指令,页面以IE8兼容模式打开。对于未正确声明!DOCTYPE指令的页面,将会以怪异模式(quirks mode)加载。
Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.Important& In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
IE9,包含标准!DOCTYPE指令的页面将会以IE9兼容模式打开,IE9浏览器的默认值。对于IE10来说,包含标准!DOCTYPE指令的页面会以IE10兼容模式打开。
Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
IE9,无论是否声明!DOCTYPE指令,页面以IE9兼容模式打开。对于未正确声明!DOCTYPE指令的页面,将会以怪异模式(quirks mode)加载。
Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
IE10,包含标准!DOCTYPE指令的页面将会以IE10兼容模式打开,IE10浏览器的默认值。
Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.
IE10,无论是否声明!DOCTYPE指令,页面以IE10兼容模式打开。
IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.
IE11,包含标准!DOCTYPE指令的页面将会以IE11兼容模式打开,IE11浏览器的默认值。
Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
IE11,无论是否声明!DOCTYPE指令,页面将会以IE11的edge模式打开。对于未正确声明!DOCTYPE指令的页面,将会以怪异模式(quirks mode)加载。
加入asp.net QQ群(),大牛助您解决bug!
扫描加大牛微信,5年 .net经验,擅长asp.net mvc技术
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。

我要回帖

更多关于 this client version 的文章

 

随机推荐