浏览器检测

53

我需要将IE和FF浏览器与其他浏览器分开。

这是伪代码:

If (CurrentBrowser == IE(6+) or FF(2+) )
{
...
}
else 
{
...
}

protected void Page_Load() 事件中(我这么认为)

if ((Request.Browser.Type == "IE") || (Request.Browser.Type == "FF"))
{
    WebMsgBox.Show("1111");
}

没有效果 :-/ IE和FF类型是什么?


9
不要进行浏览器探测,尤其是不要在服务器端进行浏览器探测。如果你没有包含正确的“Vary: User-Agent”头部信息,你会让代理缓存出现故障;如果你包含了这个头部信息,你会破坏IE的缓存。寻找客户端的解决方法(例如IE的条件注释),并且最好检查浏览器的功能而不仅仅是不可靠的用户代理名称。你试图用这种探测来解决的浏览器问题是什么? - bobince
我有一个仅适用于Firefox和IE引擎的jQuery脚本。 - cnd
8个回答

79
if (Request.Browser.Type.Contains("Firefox")) // replace with your check
{
    ...
} 
else if (Request.Browser.Type.ToUpper().Contains("IE")) // replace with your check
{
    if (Request.Browser.MajorVersion  < 7)
    { 
        DoSomething(); 
    }
    ...
}
else { }

没有“Name”参数... IE和FF分别代表Internet Explorer和Fire Fox... 我不认为是FF :-S - cnd
1
不适用于Mozilla... 尝试使用“Mozilla”而不是“FF”,但这对我也没有帮助。 - cnd
10
今天这个东西出了大问题。 对于 Firefox 17Request.Browser 返回 Mozilla17。 对于 Google Chrome 23,它返回 AppleMAC-Safari。 真是一团糟! - scrat.squirrel
你可能想要使用 request.UserAgent。 - lnaie
3
IE11的类型是"InternetExplorer11"。 - crokusek

27

以下是一种获取浏览器信息的方法,您可以使用此方法进行if语句的判断

System.Web.HttpBrowserCapabilities browser = Request.Browser;
    string s = "Browser Capabilities\n"
        + "Type = "                    + browser.Type + "\n"
        + "Name = "                    + browser.Browser + "\n"
        + "Version = "                 + browser.Version + "\n"
        + "Major Version = "           + browser.MajorVersion + "\n"
        + "Minor Version = "           + browser.MinorVersion + "\n"
        + "Platform = "                + browser.Platform + "\n"
        + "Is Beta = "                 + browser.Beta + "\n"
        + "Is Crawler = "              + browser.Crawler + "\n"
        + "Is AOL = "                  + browser.AOL + "\n"
        + "Is Win16 = "                + browser.Win16 + "\n"
        + "Is Win32 = "                + browser.Win32 + "\n"
        + "Supports Frames = "         + browser.Frames + "\n"
        + "Supports Tables = "         + browser.Tables + "\n"
        + "Supports Cookies = "        + browser.Cookies + "\n"
        + "Supports VBScript = "       + browser.VBScript + "\n"
        + "Supports JavaScript = "     + 
            browser.EcmaScriptVersion.ToString() + "\n"
        + "Supports Java Applets = "   + browser.JavaApplets + "\n"
        + "Supports ActiveX Controls = " + browser.ActiveXControls 
              + "\n";

MSDN文章


6
Tony-The-Lion说:“我并没有侮辱你,只是陈述事实,这就是证明。那段代码不能告诉你正在运行Firefox还是Chrome浏览器,它只适用于IE。以上代码的输出结果是:\n\nIE 9: Type = IE9 Browser = IEFIREFOX 17: Type = Mozilla17 Browser = MozillaCHROME 23: Type = Desktop Browser = AppleMAC-Safari.请自己运行该代码并查看输出结果。由于此编辑框只允许输入有限数量的字符,因此我无法粘贴整个输出结果。” - scrat.squirrel

10

请尝试以下代码

HttpRequest req = System.Web.HttpContext.Current.Request
string browserName = req.Browser.Browser;

1
    private void BindDataBInfo()
    {
        System.Web.HttpBrowserCapabilities browser = Request.Browser;
        Literal1.Text = "<table border=\"1\" cellspacing=\"3\" cellpadding=\"2\">";
        foreach (string key in browser.Capabilities.Keys)
        {
            Literal1.Text += "<tr><td>" + key + "</td><td>" + browser[key] + "</tr>";
        }
        Literal1.Text += "</table>";
        browser = null;
    }

0

为了浏览器兼容性,您可以使用此代码。该方法返回浏览器名称和版本:

private string GetBrowserNameWithVersion
{
    var userAgent = Request.UserAgent;
    var browserWithVersion = "";
    if (userAgent.IndexOf("Edge") > -1)
    {
        //Edge
        browserWithVersion = "Edge Browser Version : " + userAgent.Split(new string[] { "Edge/" }, StringSplitOptions.None)[1].Split('.')[0];
    }
    else if (userAgent.IndexOf("Chrome") > -1)
    {
        //Chrome
        browserWithVersion = "Chrome Browser Version : " + userAgent.Split(new string[] { "Chrome/" }, StringSplitOptions.None)[1].Split('.')[0];
    }
    else if (userAgent.IndexOf("Safari") > -1)
    {
        //Safari
        browserWithVersion = "Safari Browser Version : " + userAgent.Split(new string[] { "Safari/" }, StringSplitOptions.None)[1].Split('.')[0];
    }
    else if (userAgent.IndexOf("Firefox") > -1)
    {
        //Firefox
        browserWithVersion = "Firefox Browser Version : " + userAgent.Split(new string[] { "Firefox/" }, StringSplitOptions.None)[1].Split('.')[0];
    }
    else if (userAgent.IndexOf("rv") > -1)
    {
            //IE11
        browserWithVersion = "Internet Explorer Browser Version : " + userAgent.Split(new string[] { "rv:" }, StringSplitOptions.None)[1].Split('.')[0];
    }
    else if (userAgent.IndexOf("MSIE") > -1)
    {
        //IE6-10
        browserWithVersion = "Internet Explorer Browser  Version : " + userAgent.Split(new string[] { "MSIE" }, StringSplitOptions.None)[1].Split('.')[0];
    }
    else if (userAgent.IndexOf("Other") > -1)
    {
        //Other
        browserWithVersion = "Other Browser Version : " + userAgent.Split(new string[] { "Other" }, StringSplitOptions.None)[1].Split('.')[0];
    }

    return browserWithVersion;
}

0

我尝试过并找到了相同的解决方案

        public static string GetBrowserDetails()
        {
          string  BrowserDetails = HttpContext.Current.Request.Browser.Browser + " - " + HttpContext.Current.Request.Browser.Version + ";  Operating System : " + HttpContext.Current.Request.Browser.Platform;
          return BrowserDetails;
        }

OUTPUT : 
Chrome - 88.0; Operating System : WinNT

0
我不建议使用JS手动黑客浏览器特定的事情。要么使用像“prototype”或“jquery”这样的JavaScript库,它们将透明地处理所有特定问题。
如果你真的必须要确定浏览器类型,那么可以使用这些库。
另外,请参阅原型库中的浏览器和版本?

为什么要黑客...?我刚拿到了FF引擎和IE引擎的J代码,还必须为其他浏览器制作其他东西。 - cnd
另外,并不是所有你需要检测浏览器的东西都可以通过使用jQuery/Prototype来“修复”...例如,我有一个预览存储库中文件的网站。只有MSIE浏览器支持预览XPS文件 - 这不是jQuery或Prototype可以解决的问题。 - Michael Bray

-3

3
这并没有帮助,提供的链接包含从MSDN复制的代码,这并没有帮助。 - scrat.squirrel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接