以下是移动的设备检测代码,包含三种不同的情况
if (Request.Browser.IsMobileDevice)
{
//Do Something
}
else if (((System.Web.Configuration.HttpCapabilitiesBase)myBrowserCaps).IsMobileDevice)
{
//Do Something
}
else if (IsMobileDevice(mobileDevices))
{
//Do Something
}
public bool IsMobileDevice()
{
private static string[] mobileDevices = new string[] {"iphone","ppc"
"windows ce","blackberry",
"opera mini","mobile","palm"
"portable","opera mobi" };
string userAgent = Request.UserAgent.ToString().ToLower();
return mobileDevices.Any(x => userAgent.Contains(x));
}
我被迫写了三个条件,因为它们对一些设备失败。
谁能提出一个更好的方法?
9条答案
按热度按时间ars1skjm1#
将代码从:http://detectmobilebrowsers.com/
这就是你的说法
我对代码
http://detectmobilebrowsers.com/
所做的更改使用缓存
这段代码很快,其中一个诀窍是我们将regex设置为静态并预编译。我建议在第一次检查后将结果保存在用户会话中,并使用该会话变量,这样会快得多。
afdcj2ne2#
这段代码在我的案例中有效。
参考:HttpCapabilitiesBase.IsMobileDevice Property
qcbq4gxm3#
我使用DeviceDetector.NET,因为我经常还需要将智能手机和平板电脑分开
安装
Install-Package DeviceDetector.NET
那就这样用吧
正则表达式可以在packages目录中找到
zzzyeukh4#
Scott Hanselman在这个问题上有一个很棒的blog post。他提到了一个名为51Degrees的第3方解决方案。
u5i3ibmn5#
现有的浏览器定义很糟糕。理想情况下,您希望使用WURFL database来扩充这些定义。
幸运的是,使用51 Degrees.mobi library很容易做到这一点。
还有一个Nuget package:
vuv7lop36#
我建议将用户代理列表存储在web.config中,以使其更容易配置。
IsMobileDevice
不会主动更新新的浏览器,因此它确实有它的限制,这就是为什么你需要进一步检查。51Degrees.mobi包将是一个更可靠的替代方案。
7uzetpgm7#
检查代码隐藏中的UserAgent是否有“Mobi”,类似于javascript引用的here。
pengsaosao8#
当然,如果你想确定用户代理可能是最好的方法。你也可以看看这个方法:
http://msdn.microsoft.com/en-us/library/system.web.configuration.httpcapabilitiesbase.ismobiledevice.aspx
它应该有一些新的浏览器等问题。但它是这一个,因为你目前所做的。
s4n0splo9#
使用以下代码