【问题标题】:Browser detection浏览器检测
【发布时间】:2011-01-14 08:53:10
【问题描述】:

我需要将 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 类型?

【问题讨论】:

  • 不要浏览器嗅探,尤其是不要在服务器端浏览器嗅探。除非您包含正确的 Vary: User-Agent 标头,否则您正在使用代理缓存设置自己的损坏,在这种情况下,您正在中断 IE 中的缓存。找到一种做你正在做的事情的客户端方式(例如 IE 的条件 cmets),并且更喜欢嗅探功能而不是仅仅不可靠的用户代理名称。您尝试使用此嗅探解决的浏览器问题是什么?
  • 我有一个仅适用于 FF 和 IE 引擎的 jQuery 脚本

标签: c# asp.net browser-detection


【解决方案1】:

我不建议使用 JS 手动破解特定于浏览器的内容。使用“prototype”或“jquery”之类的 javascript 库,它将透明地处理所有特定问题。

如果您确实需要,也可以使用这些库来确定浏览器类型。

另见Browser & version in prototype library?

【讨论】:

  • 为什么黑客...?我刚刚获得了 FF 引擎和 IE 引擎的 J 代码,并且必须为其他浏览器制作其他东西。
  • 另外,并不是所有你可能需要检测浏览器的东西都可以通过使用 jquery / 原型来“修复”......例如,我有一个网站可以预览存储库中的文件。 MSIE 是唯一支持预览 XPS 文件的浏览器 - 这不是 jquery 或原型可以解决的问题。
【解决方案2】:

使用
Request.Browser

此链接将对您有所帮助:

Detect the browser using ASP.NET and C#

【讨论】:

  • 这没有帮助,提供的链接包含从 MSDN 复制的代码,这没有帮助。
【解决方案3】:

这是一种请求有关正在使用的浏览器信息的方法,您可以使用它来执行 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 Article

【讨论】:

  • Tony-The-Lion:我没有侮辱你,只是陈述事实,这是证据。该代码不会告诉您运行的是 Firefox 还是 Chrome。它只对 IE 有好处。上面代码的输出是:\n\n IE 9:Type = IE9 Browser = IE FIREFOX 17:Type = Mozilla17 Browser = Mozilla CHROME 23:Type = Desktop Browser = AppleMAC-Safari。自己运行该代码,看看它会输出什么。我无法粘贴整个输出,因为此编辑字段只允许有限数量的字符。
【解决方案4】:
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 { }

【讨论】:

  • 没有这样的参数“名称”并且... IE 和 FF 是 Internet Explorer 和 Fire Fox ... 我不认为它是 FF :-S
  • 不适用于 mozilla...尝试“Mozilla”而不是“FF”,但这对我也没有帮助。
  • 到今天为止,这已经被严重破坏了。 Request.BrowserFirefox 17 返回 Mozilla17。对于 Google Chrome 23,它返回 AppleMAC-Safari。真是一团糟!
  • 你可能想使用 request.UserAgent
  • IE11 的类型是“InternetExplorer11”。
【解决方案5】:
    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;
    }

【讨论】:

    【解决方案6】:

    试试下面的代码

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

    【讨论】:

      【解决方案7】:

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

      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;
      }
      

      【讨论】:

        【解决方案8】:

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

                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
        

        【讨论】:

          猜你喜欢
          • 2011-04-19
          • 2011-09-24
          • 2011-07-25
          • 2012-12-30
          • 2013-03-03
          • 2011-12-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多