14

I am used to using Atlas. Recently i have started transitioning to jQuery and sometimes prototype. The project that i'm currently working on is using prototype.

In Prototype, is there an easy way to get the browser name and version? I've looked over the API documentation and can't seem to find it.

4

6 回答 6

18

作为 nertzy 回答的补充,您可以使用以下方法添加检测 IE 版本的功能:

Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;
Prototype.Browser.IE8 = Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7;

另一方面,您也必须在服务器端检测用户代理的详细信息。无论如何,浏览器检测是编写跨浏览器脚本的一种严重缺陷策略,仅在浏览器功能检测失败时使用。用户很容易更改他/她的用户代理详细信息。

于 2009-03-09T13:41:32.123 回答
7

Prototype 提供了一些标志,您可以检查以了解正在运行的浏览器。请记住,检查您希望使用的功能比检查特定浏览器要好得多。

这是prototype.js当前在源代码树中的浏览器和功能检测部分:

var Prototype = {
  Browser: {
    IE:     !!(window.attachEvent &&
      navigator.userAgent.indexOf('Opera') === -1),
    Opera:  navigator.userAgent.indexOf('Opera') > -1,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && 
      navigator.userAgent.indexOf('KHTML') === -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
  },

  BrowserFeatures: {
    XPath: !!document.evaluate,
    SelectorsAPI: !!document.querySelector,
    ElementExtensions: !!window.HTMLElement,
    SpecificElementExtensions: 
      document.createElement('div')['__proto__'] &&
      document.createElement('div')['__proto__'] !== 
        document.createElement('form')['__proto__']
  },
}

因此,您可以通过调查 的值来检查当前浏览器是否是 IE Prototype.Browser.IE,或者,可以更加未来兼容并检查特定功能,例如带有Prototype.BrowserFeatures.XPath.

于 2008-10-26T23:39:46.153 回答
3

我在 Prototype 的浏览器定义之上使用它。

Object.extend(Prototype.Browser, {
    ie6: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 6 ? true : false) : false,
    ie7: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 7 ? true : false) : false,
    ie8: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 8 ? true : false) : false,
    ie9: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 9 ? true : false) : false
});

希望能帮助到你!

于 2011-01-22T20:58:33.543 回答
3

你是对的 - 原型不提供用于确定浏览器名称或版本的实用程序。

如果您特别需要将浏览器信息作为插件获取,我建议添加以下内容(直接取自 jQuery):

var Browser = Class.create({
  initialize: function() {
    var userAgent = navigator.userAgent.toLowerCase();
    this.version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1];
    this.webkit = /webkit/.test( userAgent );
    this.opera = /opera/.test( userAgent );
    this.msie = /msie/.test( userAgent ) && !/opera/.test( userAgent );
    this.mozilla = /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent );
  }
});
于 2008-10-16T17:33:43.423 回答
2

我在以下之后扩展了prototype.js:

var Prototype = { ... };

有了这个:

// extension
if (Prototype.Browser.IE) {
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
        Prototype.BrowserFeatures['Version'] = new Number(RegExp.$1);
    }
}

对我来说很好,调用就像:

if (Prototype.Browser.IE && Prototype.BrowserFeatures['Version'] == 8) { ... }
于 2009-12-01T10:51:46.037 回答
0
            <script type="text/JavaScript">

                function getBrowserVersion()
                {
                    var msg = "Not Recognised Browser";

                    if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
                    {
                        var ffversion = new Number(RegExp.$1)

                        for (var i = 1; i < 20; i++)
                        {
                            if (ffversion == i)
                            {
                                msg = "FF" + i + "x";
                                break;
                            }
                        }
                    }
                    else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
                    {
                        var ieversion = new Number(RegExp.$1)

                        for (var i = 1; i < 20; i++)
                        {
                            if (ieversion == i)
                            {
                                msg = "IE" + i + "x";
                                break;
                            }
                        }
                    }

                    alert(msg); // return msg; 
                }

           </script>
于 2012-02-24T21:11:45.517 回答