`

javascript 的 代理检测(源自js高级程序设计)

    博客分类:
  • Web
 
阅读更多
<script type="text/javascript">
var client = function(){
        //呈现引擎
        var engine = {
                ie: 0,
                gecko: 0,
                webkit: 0,
                khtml: 0,
                opera: 0,

                //完整的版本号
                ver: null
        };

        // 浏览器
        var browser = {
                //主要浏览器
                ie: 0,
                firefox: 0,
                konq: 0,
                chrome: 0,
                safari: 0,

                // 具体版本号
                ver: null
        };

        // 平台、设备和操作系统
        var system = {
                win: false,
                mac: false,
                x11: false,

                // 移动设备
                iphone: false,
                ipod: false,
                nokiaN: false,
                winMobile: false,
                macMobile: false,

                // 游戏系统
                wii: false,
                ps: false
        };

        // 检测呈现引擎和浏览器
        var ua = navigator.userAgent;
        if(window.opera){
                engine.ver = browser.ver = window.opera.version();
                engine.opera = browser.opera = parseFloat(engine.ver);
        } else if( /AppleWebKit\/(\S+)/.test(ua)){
                engine.ver = RegExp["$1"];
                engine.webkit = parseFloat(engine.ver);

                // 确定是 Chrmoe 还是 Safari
                if(/Chrmoe\/(\S+)/.test(ua)){
                        browser.ver = RegExp["$1"];
                        browser.chrome = parseFloat(browser.ver);
                } else if(/Version\/(\S+)/.test(ua)){
                        browser.ver = RegExp["$1"];
                        browser.safri = parseFloat(browser.ver);
                } else {
                        // 近似的确定版本号
                        var safariVersion = 1;
                        if(engine.webkit < 100){
                                safariVersion = 1;
                        } else if (engine.webkit < 312){
                                safariVersion = 1.2;
                        } else if (engine.webkit < 412){
                                safariVersion = 1.3;
                        } else {
                                safariVersion = 2;
                        }

                        browser.safari = browser.ver = safariVersion;
                }
        } else if (/KHTML\/(\S+)/.test(ua) || /Knoqueror\/([^;]+)/.test(ua)){
                engine.ver = browser.ver = RegExp["$1"];
                engine.khtml = browser.konq = parseFloat(engine.ver);
        } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
                engine.ver = RegExp["$1"];
                engine.gecko = parseFloat(engine.ver);

                // 确定是不是Firefox
                if (/Firefox\/(\S+)/.test(ua)){
                        browser.ver = RegExp["$1"];
                        browser.firefox = parseFloat(browser.ver);
                }
        } else if (/MSIE ([^;]+)/.test(ua)){
                engine.ver = browser.ver = RegExp["$1"];
                engine.ie = browser.ie = parseFloat(engine.ver);
        }

        // 检测浏览器
        browser.ie = engine.ie;
        browser.opera = engine.opera;

        // 检测平台
        var p = navigator.platform;
        system.win = p.indexOf("Win") == 0;
        system.mac = p.indexOf("Mac") == 0;
        system.x11 = (p == "X11") || (p.indexOf("Linux") == 0 );

        // 检测 windows操作系统
    if (system.win){
                if (/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){
                        if (RegExp["$1"] == "NT"){
                                switch (RegExp["$2"]){
                                        case "5.0":
                                                system.win = "2000";
                                                brreak;
                                        case "5.1":
                                                system.win = "xp";
                                                break;
                                        case "6.0":
                                                system.win = "Vista";
                                                break;
                                        case "6.1":
                                                system.win = " Win7";
                                                break;
                                        default:
                                                system.win = "NT";
                                                break;
                                }
                        } else if (RegExp["$1"]){
                                system.wein = "ME";
                        } else {
                                system.win = RegExp["$1"];
                        }
                }
    } 

        // 移动设备
        system.iphone = ua.indexOf("iPhone") >  -1;
        system.ipod = ua.indexOf("iPod") > -1;
        system.nokiaN = ua.indexOf("NokiaN") > -1;
        system.winMobile = (system.win == "CE");
        system.macMobile = (system.iphone || system.ipod);

        // 游戏系统
        system.wii = ua.indexOf("Wii") > -1;
        system.ps = /playstation/i.test(ua);

        // 返回这些对象
        return {
                engine: engine,
                browser: browser,
                system: system
        };
}();

if (client.browser.ie == "0"){
        alert("请选择使用IE浏览器!");
} else {
        alert("您现在使用的是IE浏览器");
}
</script>
分享到:
评论

相关推荐

    《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析

    本文实例讲述了Javascript面向对象程序设计单例模式原理与实现方法。分享给大家供大家参考,具体如下: 1.单例模式概述 源自百度百科对于单例模式的定义: 单例模式的意思就是只有一个实例。单例模式确保某一个类...

    JS多个表单数据提交下的serialize()应用实例分析

    本文实例讲述了JS多个表单数据提交下的...而源自于《JavaScript高级程序设计》一书的serialize()函数就是解决这个问题的最好办法,该函数如下: function serialize(form){ var parts = [], field = null, i,

    表单的验证

     本文介绍了如何利用 Prototype.js JavaScript 库在表单中结合 Ajax 代码来解决常见的用户体验问题。  简单的 Ajax 表单提交 基于XML的异步JavaScript,简称AJAX,是当前Web创新(称为Web2.0)中的一个王冠。...

    archiejs-core:Archie.js是一个nodejs依赖关系链接库; 用于编写解耦的模块化应用程序

    ArchieJs简介Archiejs在nodejs代码... 此处详细阅读: : 项目背景ArchieJs源自Architech.js(由c9编写),并进行了一些改进。 它更简单,为新手用户提供友好的错误消息,并且不再是同构的nodejs框架。 ArchieJ和Archie

    notion-components:一个面向极简主义者的React组件库。 使用已经到位的设计系统来构建您的Web应用程序。 灵感源自概念-多合一工作场所

    欢迎使用概念组件 :waving_hand: React Component Library的极简主义 先决条件 节点&gt; = 10 ... App.js : import React , { useState } from 'react' import { TextBox } from 'notion-component

    eschersketch:用于探索对称设计的绘图程序

    该程序旨在对古典和玫瑰花结中的图案设计进行实验。 它允许用户实时绘制和布置重复的图案。 此版本已从较早的简化原型进行了全面修订。 它在移动和桌面浏览器上都可以正常工作。 现在支持撤消/重做和一组基本的...

    halyos:在FHIR上使用SMART重新设计患者门户体验

    哈利奥斯在FHIR上使用SMART重新设计患者门户体验Halyos是由在哈佛医学院开发的可视化EHR Web应用程序,它补充了现有患者门户的功能。 Halyos旨在与现有的EHR系统集成,以帮助患者解释其健康数据。 Halyos应用程序...

    基于JavaWeb的英雄联盟管理系统源码+项目说明.zip

    2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...

    buratino:Buratino使用的教学应用

    Buratino教学应用程式 该项目的目的是开发一个指令应用程序,该程序将由Buratino AB使用。 该应用程序将基于HTML,CSS和JS构建,并用作可安装的Progressive ... 该设计将源自Figma原型,并在开发过程中对设计进行更新。

    syn:通用的holochain dna和UI库,用于构建实时共享状态hApp

    设计该项目使在Holochain的分布式对等环境中构建协作应用程序变得容易。 Syn使用Holochain的基础结构来实现数据完整性和对等网络,以存储共享内容状态的常规“提交”,同时协调组成节点之间这些提交的大量增量。该...

    Suiyi

    开发周期周期预期时间软件设计3.31-4.2程序编码4。3-5月中程序测试&提交5月后旬特性界面对文字内容两端添加双波浪线~~可添加删除线效果。已完成事项多主题支持(深色模式适应,修正色更改)双栏初步瀑布流布局备忘...

    Anvil-Calculator:Minecraft Anvil XP计算器,用于组合工具

    铁砧计算器Minecraft Anvil XP计算器,用于组合工具一个简单的客户端Web应用程序,可帮助您计算Anvil工作所需的XP 砧力学源自特征所有可用的魔法工具(包括书籍!) 每种工具的兼容附魔及其可用级别列表不兼容的结界...

    crowdheritage:Crowdheritage是一个开放的众包平台,旨在丰富文化遗产元数据

    设计和实施自定义众包活动 注释文化遗产内容 语义标签,带有源自叙词表和词汇表的注释(例如Wikidata) 地理标记 颜色标签 验证注释(上投票,下投票) 通过Europeana Annotation API将注释发布到Europeana 显示...

    brasilino4:使用套接字由 PHP 控制的简单 RC

    Brasilino 4.0是一个源自的项目,最初由和 Things Hacker Team 创建。 在这个 4.0 版本中,我们使用演变为跨平台应用程序,我们将硬件和应用程序之间的通信语言从 Java 更改为 PHP 重要的 您可以在找到的原始设计

    create-aws-codedeploy-deployment:从 GitHub 操作工作流创建 AWS CodeDeploy 部署的操作

    部署组和部署配置本身源自.appspec.yml的附加配置部分。 注意:本自述文件假设您熟悉。 设计目标 虽然这个 Action 主要是想避开我们,但它做出了一些基本假设: 对于您的 GitHub 存储库,已经设置了相应的 ...

    art-of-computer-science:这是舞蹈数据可视化项目“计算机科学的艺术”的存储库

    [arra]stre “古典芭蕾与计算机科学相遇”,是一种数字舞蹈表演,其动作和概念源自计算机科学理论。 一场现场表演,加上一系列打破表演背后科学理论的研讨会(代码马戏团、圆形屋的音乐材料以及布莱顿数字节和 ...

    Pathfinding_Visualiser:可视化实际中的路径查找算法

    该项目的灵感源自。 我认为这是一个可视化不同寻路算法工作方式的出色项目。 我想用真实的地图数据来介绍这个想法。 功能(当前不完整) 前端 在React应用程序中使用 。 地图将具有可移动的开始和结束标记。 搜索...

    to-do-RIGHT-NOW:奥丁计划

    简短的创建一个功能来执行应用程序,使其遵循特定于基于对象的特定设计参数和功能资质认证所有svg图标均已在Creative Commons许可下使用,且均源自 。概念我的概念是“立即行动”,这是一个分层的待办事项,供人们...

    ASP EXCEL导入SQL

    这个原则是源自于我们对于数据库表的数据操作:(生)、select(见)、(变)和(灭),所以有时候CRUD也写作为RUDI,其中的I就是,这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如...

Global site tag (gtag.js) - Google Analytics