我有一个Ektron网站,它使用WURFL(最新版本,2.3.2)来检测设备。使用IE9浏览网站时,会向用户显示该网站的移动版本。
用户代理是 -
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
当我在WURFL homepage上输入此UA时,它显示为通用网络浏览器。
但是,在使用Asp.NET WURFL库时,它会被检测为移动设备。
以下代码 -
IWURFLManager wurflManager = wurflManagerProvider.WURFLManager;
IDevice device = wurflManager.GetDeviceForRequest(Request);
var device_os = device.GetCapability("device_os");
var device_os_version = device.GetCapability("device_os_version");
var device_model = device.GetCapability("model_name");
deviceinfo.Text += "WURFL Model: ";
deviceinfo.Text += device_model;
deviceinfo.Text += "WURFL Device OS: ";
deviceinfo.Text += device_os;
deviceinfo.Text += "WURFL Device OS Version: ";
deviceinfo.Text += device_os_version;
输出 -
WURFL Model: Windows Mobile 7.5
WURFL Device OS: Windows Phone OS
WURFL Device OS Version: 7.5
为什么会这样?
答案 0 :(得分:1)
问题在于WURFL并非旨在区分桌面设备和移动设备。它只关注移动设备。桌面通常被检测为移动设备。 解决方法是包含desktop_browser_patch.xml文件。但是,您必须手动将Firefox 15和16添加到补丁文件中,并继续使用出现的每个版本的Firefox更新它。
我发现最好在User代理上使用Regular表达式来确定它是桌面还是移动。如果它是移动设备,则仅使用Wurfl检测设备功能。 在线有几个正则表达式。它们都是不完美的。还要检查Request.Browser.IsMobileDevice。如果这是真的,那么它就是移动设备。如果这是假的,那么它可能是也可能不是移动设备。
答案 1 :(得分:1)
我在这里参加派对有点晚了,但我在这个问题上与Ektron的支持人员合作过。
直到Ektron版本8.6,他们使用的是tholder WURFL API驱动程序。它无法正常工作。它不仅将IE 9视为移动浏览器,而且还没有将Android OS 4.0+视为移动浏览器(始终显示桌面)。
补丁文件也没有解决问题。
我遇到这个问题的原因是因为它没有读完整个wurfl.xml.gz文件。
经过Ektron支持的多轮来回,我们决定为Ektron 8.6制作修补程序来解决这个问题是一项巨大的任务。
升级到Ektron 8.7可以解决这个问题,因为它使用新的WURFL API驱动程序,现在可以正确检测IE 9和Android。