在应用程序里识别UserAgent对应的浏览器

ASP.Net有很好的机制来识别用户的浏览器: 用Request.Browser就可以拿到一个 HttpBrowserCapabilities,然后用相应的属性可以取到值,比较浏览器类型,屏幕大小,JS支持等等。 对于移动设备更可以这么用,很容易拿到需要的属性(当然ASP.Net自带的浏览器库还是很不全)。

但是怎样在WinApp里根据UserAgent识别浏览器呢?我通过Reflector看到主要是在 BrowserCapabilitiesFactory这个类中对浏览器的Capability进行设置,于是把里面的一部分代码拿出来 ,发现果然可以用: 

1string UA = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 

2.0.50727; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2; MS-RTC LM 8)";
2
3BrowserCapabilitiesFactory f = new BrowserCapabilitiesFactory();
4HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities();
5Hashtable hashtable = new Hashtable(180, StringComparer.OrdinalIgnoreCase);
6hashtable[string.Empty] = UA;
7browserCaps.Capabilities = hashtable;
8NameValueCollection headers = new NameValueCollection();
9
10f.ConfigureBrowserCapabilities(headers, browserCaps);

这样在browserCaps类里拿到浏览器的各种属性。

更进一步,因为ASP.Net自带的BrowserCapabilities太少,如果要自己为应用程序加一些UA的识别, 特别是移动设备等,可以用.Net 2.0支持的Browser添加机制(大概微软会发布一些最新移动设备 的.Browser文件)。具体方法如下:

1、用VS新建一个Website,"Add ASP.Net Folder" - "App_Browsers",把下载到或自己写的.Browser 文件放到里面。

2、Publish Web Site, 到编译出来的目录下找到bin目录,有一个App_Browsers.dll。

3、到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下运行:

aspnet_regbrowsers.exe -i

这样在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers目录下可以拿到一个 ASP.BrowserCapsFactory.dll。

4、在你的应用程序里引用App_Browsers.dll和ASP.BrowserCapsFactory.dll,把最上面那段代码中的 BrowserCapabilitiesFactory f = new BrowserCapabilitiesFactory();改成:

ASP.ApplicationBrowserCapabilitiesFactory f = new ASP.ApplicationBrowserCapabilitiesFactory();

就可以在你的应用程序里用UA识别出浏览器了!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索目录
, 浏览器
, asp
, 应用程序
, winapp
, browser
一个
查看浏览器useragent、浏览器useragent大全、360浏览器user agent、微信浏览器user agent、浏览器useragent,以便于您获取更多的相关知识。

时间: 2024-09-01 16:25:51

在应用程序里识别UserAgent对应的浏览器的相关文章

SQL Sever怎样同时插入N条数据而不在程序里控制

问:"怎样同时插入N条数据,却不在程序里控制?" 答:"由于SQL Sever不支持数组参数.所以只能用另类的办法了.利用SQL Server强大的字符串处理传把数组格式化为类似"1,2,3,4,5,6". 然后在存储过程中用SubString配合CharIndex把分割开来. 详细的存储过程: CREATE PROCEDURE dbo.ProductListUpdateSpecialList @ProductId_Array varChar(800),

如何安装程序不在“添加或删除程序”里显示

  有的时候在电脑上安装了一些程序,可是又不希望这些程序在"控制面板"的"添加或删除程序"列表中显示,那么该如何进行操作呢?今天,小编就跟大家介绍下解决方法. 不让程序在"添加或删除程序"里显示方法: 运行regedit命令打开"注册表编辑器",在左侧窗格中依次单击进入: "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall",

delphi线程问题 delphi 程序里我写了一个方法

问题描述 delphi线程问题 delphi 程序里我写了一个方法 delphi 程序里我写了一个方法,方法里面的算法比较复杂,计算起来时间比较长,我想把这个方法单独放到一个线程里去执行,请问是怎么写?一点头绪没有啊,谢谢 解决方案 unit Unit1; interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls; type TForm1 = class(T

我的程序里《我的歌声里》程序员版

我的程序里 没有一点点防备 也没有一丝顾虑 突然错误出现 在我的日志里带给我惊喜 身不自已可是你偏又这样 在我不知不觉中悄悄的 消失 从我的堆栈里没有音讯 剩下了报警短信 你 存在我某一个模块里 我的梦里,我的心里,我的程序里 你 存在我深哪一个模块里 我的梦里 我的心里 我的程序里 还记得我们曾经肩并肩一起排查 某个线上问题尽管一开始下起来没法下手 但我们没有放弃自己的借口 一个断点 一个结构 一行一行注释的背后 好像是一场战斗 不能回头 你存在我某一行代码里 我的梦里 我的心里 我的程序里

c++-各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现?

问题描述 各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现? 对于程序运行过程中卡死已经能检测,但是对于一些弹框类的运行出错却不知道怎么检测,请各位大虾指点迷津; 现在没有C币,如果回答是我想要的,我花钱补上 解决方案 这不就是编写一个华医生么(注:华医生是微软系统上负责处理应用程序崩溃的程序,就是你图上的"xxx已停止工作,Windows正在联机查找解决方案"),这是一个应用程序,是在用户模式下实现的,而并非在内核中实现,其实华医生也可以卸

数据库中保存\t ,程序里取出后变为 \\t 怎么解决

问题描述 数据库中保存着需要进行分隔的值split值为"t"如下图在程序里取到这个split的值后,进行分隔,发现变成"\t"了,致使使用string[]str=text.Split(newstring[]{strsplit},StringSplitOptions.RemoveEmptyEntries);对text的值进行分隔时出现错误,分析不出来.手动将strsplit替换为"t"就可以.有什么办法解决 解决方案 解决方案二:这样就可以分隔解决

pb程序里如何调用vs2012编译的dll ,该dll是封装的第三方的webservice

问题描述 pb程序里如何调用vs2012编译的dll ,该dll是封装的第三方的webservice 第三方给了一个webservice,我用vs的命令,编译成了dll,可惜pb程序里无法正常调用该dll 解决方案 .net的dll,需要包装成com对象,才能被pb调用,不是一般的dll.关于如何包装com组件,以及pb如何调用com组件,请google. 解决方案二: pb程序里如何调用vs2012编译的dll ,该dll是封装的第三方的webservice 第三方给了一个webservice

c#程序里有个地方出错,提示unsafe使用不正确,(c#)

问题描述 c#程序里有个地方出错,提示unsafe使用不正确,(c#) private void button2_Click(object sender, EventArgs e) { Bitmap src = new Bitmap(pictureBox1.Image); int w = pictureBox1.Image.Width; int h = pictureBox1.Image.Height; try { Bitmap bitmap1 = new Bitmap(w, h, System

集群-java程序里如何集成zookeeper应用

问题描述 java程序里如何集成zookeeper应用 在网上的资料全是zookeeper的安装测试,这些我已经完成了,现在想在java程序里调用zookeeper集群选举出来的leader的IP地址,这个需求应该怎么用java实现,求高手解答,谢谢! 解决方案 1:首先启动你的zookeeper的服务.你肯定是吧你的服务注册到你的zookeeper中2:在启动zookeeper之前你得先安装dubbo这个服务中间件,他们是配套使用的.这个你去网上下载就行3:在spring的配置文件中配置zoo