目前我正在为浏览器的功能,我试图测试浏览器定义文件来与.NET 4.0。要做到这一点,我在附加使用的Firefox来改变用户代理,我有一个简单的网页,其中以下报道:为什么在浏览器功能中看到这些奇怪的结果?
Request.UserAgent
Request.Browser.Id
Request.Browser.Browser
Request.Browser.MajorVersion
Request.Browser.MinorVersion
Request.Browser.Platform
Request.Browser.IsMobileDevice
Request.Browser.MobileDeviceManufacturer
Request.Browser.MobileDeviceModel
一般来说,这给出了基于在评论中提供的例子正确的信息在默认的浏览器定义文件中。然而,我不时看到奇怪的结果,我无法解释。
拿在iphone.browser
定义文件,该文件是如下的例子iPhone用户代理:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
这应该返回浏览器如Safari,这确实。这是下降到有Safari浏览器作为一个父亲,这对术语Safari
匹配的IPhone网关。
改变用户代理略有所以它模拟了邮件客户端上的iPhone用户代理是指去除用户代理的端部,如下所示:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko)
现在,这应该返回的Mozilla的浏览器,因为它将无法匹配术语Safari
。但是,在第一次报告返回不正确的信息之后立即分析这一点,并且仍然指示浏览器为Safari。
添加自定义.browser
文件与App_Browsers
文件夹,然后修改,似乎迫使它是正确的暂时,几乎像定义或规则被缓存,并在每次请求没有完全运行。
这工作的其他方式也一样,如果你的第二个例子用户代理上启动,然后在分析第一个将作为Mozilla浏览器Safari浏览器,而不是报告。
任何人都可以解释这种现象或解决它的方法吗?它是否试图做某种(不那么)聪明的缓存,它根据类似的用户代理进行假设?
谢谢。
如果你说的是正确的,那么结果将是一致的,无论哪个用户代理将首先分析,但这不是因为在我的例子描述的情况。您可以看到自己的规则,它们与Windows中的相关Framework文件夹一起存储在“Config/Browsers”中。至于你的评论“比赛只有寻找字符串'Safari'还有更多。”这正是它匹配作为可在'safari.browser'文件,你会看到它从Mozilla的继承中可以看出,简单地使用它扩展'<的userAgent匹配=“野生动物园” />' – rrrr
只注意到这个编辑当有人投了这个问题时,我会在有空的时候再进一步调查。 – rrrr