คุณจะตรวจสอบเวอร์ชันของเบราว์เซอร์ได้อย่างไร?


288

ฉันค้นหาโค้ดที่จะให้ฉันตรวจพบว่าผู้ใช้ที่เข้าชมเว็บไซต์นั้นมี Firefox 3 หรือ 4 ทั้งหมดที่ฉันพบคือรหัสเพื่อตรวจสอบประเภทของเบราว์เซอร์ แต่ไม่ใช่เวอร์ชัน

ฉันจะตรวจสอบเวอร์ชันของเบราว์เซอร์เช่นนี้ได้อย่างไร


6
ฉันแนะนำให้ติดตั้งในห้องสมุดที่พิสูจน์แล้วแทนรหัสขนาดเล็ก: * github.com/bestiejs/platform.js * github.com/ded/bowserทั้งคู่มี> 1,000 ดาว
Simon Fakir

คุณสามารถใช้ไลบรารี JavaScript UAParser เพื่อตรวจสอบเบราว์เซอร์และเวอร์ชันของเบราว์เซอร์ ฉันทำตามนี้วิธีการตรวจสอบเบราว์เซอร์, เครื่องยนต์, ระบบปฏิบัติการ, CPU และอุปกรณ์โดยใช้ JavaScript?
Luzan Baral

คำตอบ:


504

คุณสามารถเห็นสิ่งที่เบราว์เซอร์พูดและใช้ข้อมูลนั้นสำหรับการบันทึกหรือทดสอบเบราว์เซอร์หลายตัว

navigator.sayswho= (function(){
    var ua= navigator.userAgent, tem, 
    M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    if(M[1]=== 'Chrome'){
        tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
        if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
    }
    M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
    return M.join(' ');
})();

console.log(navigator.sayswho); // outputs: `Chrome 62`


2
เพิ่งค้นพบปัญหาร้ายแรงที่ลดระดับ broswer IE11 เป็น IE10 navigatior user agent แสดง Mozilla / 4.0 (รองรับ; MSIE 7.0; Windows NT 6.1; WOW64; Trident / 6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) จากสตริง IE7 กับตรีศูล / 6.0 ต้องระวัง
Yogesh

ไม่ควรที่ 2 ถึงบรรทัดสุดท้ายเป็นM[1] = tem[1]มากกว่าM[2]? ด้วยรหัสที่มันกำลังยืนสตริงตัวแทนผู้ใช้ Opera 12.14 ผลตอบแทนOpera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14 Opera 9.80 12.14IMO ผลลัพธ์ที่ถูกต้องน่าOpera 12.14จะประสบความสำเร็จตามคำแนะนำของฉัน
Kirk Woll

58
มันจะมีประโยชน์ถ้าคำตอบนี้รวมตัวอย่างผลลัพธ์ ฉันไม่สามารถบอกได้ว่าสายคาดหวังจากฟังก์ชั่น
fivedogit

ไม่บัญชีสำหรับขอบ ๆ :tem = ua.match(/\b(OPR|Edge)\/(\d+)/i); if (tem != null) return {name : tem[1] === 'OPR' ? 'Opera' : tem[1], version : tem[2]};
วินเซนต์ Ketelaars

6
สคริปต์นี้รายงานเบราว์เซอร์ Chrome เวอร์ชัน 4.0 อย่างไม่ถูกต้องสำหรับเบราว์เซอร์ Facebook ภายใน (เรียกใช้เมื่อคุณคลิกเว็บลิงก์ภายในแอพ Facebook บน Android) สตริง useragent ดูเหมือนว่า: Mozilla/5.0 (Linux; Android 5.0; Nexus 9 Build/LRX21R; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/45.0.2454.95 Safari/537.36 [FB_IAB/FB4A;FBAV/50.0.0.10.54;]นี่คือตัวแทนผู้ใช้ที่โดดเด่นมาก แต่น่าเสียดายที่ไม่สามารถเพิกเฉยได้ ...
Willster

205

นี่คือการปรับปรุงคำตอบของ Kennebec

function get_browser() {
    var ua=navigator.userAgent,tem,M=ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; 
    if(/trident/i.test(M[1])){
        tem=/\brv[ :]+(\d+)/g.exec(ua) || []; 
        return {name:'IE',version:(tem[1]||'')};
        }   
    if(M[1]==='Chrome'){
        tem=ua.match(/\bOPR|Edge\/(\d+)/)
        if(tem!=null)   {return {name:'Opera', version:tem[1]};}
        }   
    M=M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem=ua.match(/version\/(\d+)/i))!=null) {M.splice(1,1,tem[1]);}
    return {
      name: M[0],
      version: M[1]
    };
 }

var browser=get_browser(); // browser.name = 'Chrome'
                           // browser.version = '40'

console.log(browser);

วิธีนี้คุณสามารถป้องกันตนเองจากความสับสนของรหัส


(เช่นบางแพลตฟอร์ม - os x - จะให้เอาต์พุตที่แตกต่างกันสำหรับ navigator.userAgent และคุณไม่สามารถรู้จักเบราว์เซอร์ Opera ด้วยสตริง 'Opera' แต่แทนที่ด้วย 'OPR')
trainoasis

get_browser และ get_browser_version ส่งกลับรายละเอียดที่ไม่ถูกต้องภายในเงื่อนไข 'if trident' และ 'if chrome' ถ้า tem! = null
Pixelthis

54

นี่เป็นการรวมคำตอบของ kennebec (K) กับคำตอบของ Hermann Ingjaldsson (H):

  • รักษารหัสขั้นต่ำของคำตอบดั้งเดิม (K)
  • ทำงานร่วมกับ Microsoft Edge (K)
  • ขยายวัตถุนำทางแทนการสร้างตัวแปร / วัตถุใหม่ (K)
  • แยกรุ่นและชื่อเบราว์เซอร์ออกเป็นวัตถุลูกอิสระ (H)

 

navigator.browserSpecs = (function(){
    var ua = navigator.userAgent, tem, 
        M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
        return {name:'IE',version:(tem[1] || '')};
    }
    if(M[1]=== 'Chrome'){
        tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
        if(tem != null) return {name:tem[1].replace('OPR', 'Opera'),version:tem[2]};
    }
    M = M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem = ua.match(/version\/(\d+)/i))!= null)
        M.splice(1, 1, tem[1]);
    return {name:M[0], version:M[1]};
})();

console.log(navigator.browserSpecs); //Object { name: "Firefox", version: "42" }

if (navigator.browserSpecs.name == 'Firefox') {
    // Do something for Firefox.
    if (navigator.browserSpecs.version > 42) {
        // Do something for Firefox versions greater than 42.
    }
}
else {
    // Do something for all other browsers.
}

45

ต่อไปนี้เป็นห้องสมุดเด่นหลายแห่งที่จัดการการตรวจหาเบราว์เซอร์ตั้งแต่เดือนพฤษภาคม 2562

Bowser by lancedikson - 3,761 ★ s - อัปเดตล่าสุด 26 พฤษภาคม 2019 - 4.8KB

var result = bowser.getParser(window.navigator.userAgent);
console.log(result);
document.write("You are using " + result.parsedResult.browser.name +
               " v" + result.parsedResult.browser.version + 
               " on " + result.parsedResult.os.name);
<script src="https://unpkg.com/bowser@2.4.0/es5.js"></script>

* รองรับ Edge ตาม Chromium


Platform.jsโดย bestiejs - 2,250 ★ s - อัปเดตล่าสุด 30 ตุลาคม 2018 - 5.9KB

console.log(platform);
document.write("You are using " + platform.name +
               " v" + platform.version + 
               " on " + platform.os);
<script src="https://cdnjs.cloudflare.com/ajax/libs/platform/1.3.5/platform.min.js"></script>

jQuery Browserโดย gabceb - 504 ★ s - อัปเดตล่าสุด 23 พฤศจิกายน 2558 - 1.3KB

console.log($.browser)
document.write("You are using " + $.browser.name +
               " v" + $.browser.versionNumber + 
               " on " + $.browser.platform);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-browser/0.1.0/jquery.browser.min.js"></script>

Detect.js (เก็บถาวร)โดย darcyclarke - 522 ★ s - อัปเดตล่าสุด 26 ต.ค. 2558 - 2.9KB

var result = detect.parse(navigator.userAgent);
console.log(result);
document.write("You are using " + result.browser.family +
               " v" + result.browser.version + 
               " on " + result.os.family);
<script src="https://cdnjs.cloudflare.com/ajax/libs/Detect.js/2.2.2/detect.min.js"></script>

Browser Detect (เก็บถาวร)โดย QuirksMode - อัปเดตล่าสุด 14 พ.ย. 2556 - 884B

console.log(BrowserDetect)
document.write("You are using " + BrowserDetect.browser +
               " v" + BrowserDetect.version + 
               " on " + BrowserDetect.OS);
<script src="https://kylemit.github.io/libraries/libraries/BrowserDetect.js"></script>


เด่นกล่าวถึง:

  • WhichBrowser - 1,355 ★ s - อัปเดตล่าสุด 2 ต.ค. 2561
  • Modernizr - 23,397 ★ s - อัพเดท 12 มกราคม 2019 ล่าสุด - จะเลี้ยงม้าเลี้ยง, ตรวจสอบคุณสมบัติควรขับรถใด ๆcanIuseคำถามสไตล์ การตรวจจับเบราว์เซอร์เป็นเพียงการให้รูปภาพที่กำหนดเองดาวน์โหลดไฟล์หรือคำแนะนำสำหรับเบราว์เซอร์แต่ละตัว

อ่านเพิ่มเติม



18

ใช้สิ่งนี้: http://www.quirksmode.org/js/detect.html

alert(BrowserDetect.browser); // will say "Firefox"
alert(BrowserDetect.version); // will say "3" or "4"

7
การอ้างอิงที่ล้าสมัยไม่ได้รับการสนับสนุนอีกต่อไป - "หน้านี้เคยมีสคริปต์ตรวจสอบเบราว์เซอร์ของตัวเอง แต่ฉันพบว่าฉันไม่มีเวลาเพียงพอในการปรับปรุงให้ทันสมัยดังนั้นฉันจึงลบออก"
Neolisk

16

ฉันกำลังมองหาวิธีแก้ปัญหาสำหรับตัวเองเนื่องจากjQuery 1.9.1ขึ้นไปได้ลบ$.browserฟังก์ชันการทำงานออกแล้ว ฉันมากับฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่เหมาะกับฉัน มันต้องการตัวแปรทั่วโลก (ฉันเรียกว่า mine_browser) เพื่อตรวจสอบว่าเบราว์เซอร์ใด ฉันได้เขียนjsfiddleเพื่อแสดงให้เห็นว่าสามารถใช้งานได้อย่างไรแน่นอนว่าสามารถขยายได้สำหรับเบราว์เซอร์อื่นโดยเพียงเพิ่มการทดสอบสำหรับ _browser.foo โดยที่ foo คือชื่อของเบราว์เซอร์ ฉันเพิ่งได้รับความนิยม

detectBrowser ()

_browser = {};

function detectBrowser() {
  var uagent = navigator.userAgent.toLowerCase(),
      match = '';

  _browser.chrome  = /webkit/.test(uagent)  && /chrome/.test(uagent)      &&
                     !/edge/.test(uagent);

  _browser.firefox = /mozilla/.test(uagent) && /firefox/.test(uagent);

  _browser.msie    = /msie/.test(uagent)    || /trident/.test(uagent)     ||
                     /edge/.test(uagent);

  _browser.safari  = /safari/.test(uagent)  && /applewebkit/.test(uagent) &&
                     !/chrome/.test(uagent);

  _browser.opr     = /mozilla/.test(uagent) && /applewebkit/.test(uagent) &&
                     /chrome/.test(uagent)  && /safari/.test(uagent)      &&
                     /opr/.test(uagent);

  _browser.version = '';

  for (x in _browser) {
    if (_browser[x]) {

      match = uagent.match(
                new RegExp("(" + (x === "msie" ? "msie|edge" : x) + ")( |\/)([0-9]+)")
              );

      if (match) {
        _browser.version = match[3];
      } else {
        match = uagent.match(new RegExp("rv:([0-9]+)"));
        _browser.version = match ? match[1] : "";
      }
      break;
    }
  }
  _browser.opera = _browser.opr;
  delete _browser.opr;
}

เพื่อตรวจสอบว่าเบราว์เซอร์ปัจจุบันเป็น Opera หรือไม่

if (_browser.opera) { // Opera specific code }

แก้ไขแก้ไขการจัดรูปแบบแก้ไขการตรวจหา IE11 และ Opera / Chrome เปลี่ยนเป็นเบราว์เซอร์ผลลัพธ์จากผลลัพธ์ ตอนนี้ลำดับของ_browserคีย์ไม่สำคัญ อัปเดตลิงก์jsFiddleแล้ว

2015/08/11 แก้ไขเพิ่ม testcase ใหม่สำหรับ Internet Explorer 12 (EDGE) แก้ไขปัญหา regexp ขนาดเล็ก อัปเดตลิงก์jsFiddleแล้ว


1
สำหรับ IE Edge (aka Spartan) ใหม่ใน Windows 10 แสดงว่าเบราว์เซอร์ของฉันคือ Chrome 42 --- สตริงตัวแทนผู้ใช้: mozilla / 5.0 (windows nt 10.0; win64; x64) applewebkit / 537.36 (khtml, เช่นตุ๊กแก) chrome / 42.0 .2311.135 ซาฟารี / 537.36 edge / 12.10240 เบราว์เซอร์เป็นโครเมี่ยม 42
Rulisp

1
ขอบคุณ @Rulisp สำหรับความคิดเห็นของคุณและให้ตัวอย่าง uagent เนื่องจากฉันไม่มี Edge หรือ Win10 เพียงไปจากฉันฉันได้ปรับปรุงรหัสใน jsFiddle เพื่อสะท้อนว่า ถ้าคุณต้องการที่จะทดสอบกับตัวอย่าง uagent คุณให้ฉันไปที่ซอนี้ แจ้งให้เราทราบหากมีสิ่งผิดปกติ
Danail Gabenski

13
function BrowserCheck()
{
    var N= navigator.appName, ua= navigator.userAgent, tem;
    var M= ua.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
    if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) {M[2]=tem[1];}
    M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
    return M;
}

นี่จะส่งคืนอาร์เรย์องค์ประกอบแรกคือชื่อเบราว์เซอร์องค์ประกอบที่สองคือหมายเลขเวอร์ชันที่สมบูรณ์ในรูปแบบสตริง


9

jQuery สามารถจัดการเรื่องนี้ได้ค่อนข้างดี ( jQuery.browser )

var ua = $.browser;
if ( ua.mozilla && ua.version.slice(0,3) == "1.9" ) {
    alert( "Do stuff for firefox 3" );
}

แก้ไข: ตามที่ Joshua เขียนไว้ในความคิดเห็นของเขาด้านล่างคุณสมบัติjQuery.browserไม่ได้รับการสนับสนุนใน jQuery ตั้งแต่รุ่น 1.9 (อ่านjQuery 1.9 บันทึกย่อเพื่อดูรายละเอียดเพิ่มเติม) ทีมพัฒนา jQuery แนะนำให้ใช้วิธีการที่สมบูรณ์ยิ่งขึ้นเช่นการปรับ UI กับไลบรารีModernizr


16
jQuery 1.9 ได้ลบการสนับสนุน $ .browser ดังนั้นจึงไม่มีตัวเลือกอีกต่อไป
Joshua

โจชัว - ใช่คุณพูดถูก อย่างน้อยพวกเขาออกจากสถานที่ให้บริการ jQuery.support สำหรับการตรวจสอบการสนับสนุนเบราว์เซอร์สำหรับคุณสมบัติบางอย่าง ( แต่ผมไม่แน่ใจว่าถ้ากรณีนี้ของคำถามเริ่มต้น)
มาเร็ค

7

ใน Javascript ล้วนๆคุณสามารถจับคู่ RegExp navigator.userAgentเพื่อค้นหารุ่น Firefox:

var uMatch = navigator.userAgent.match(/Firefox\/(.*)$/),
    ffVersion;
if (uMatch && uMatch.length > 1) {
    ffVersion = uMatch[1];
}

ffVersionจะเป็นundefinedถ้าไม่ใช่เบราว์เซอร์ Firefox

ดูตัวอย่างการทำงาน→




4

ฉันเขียนตัวตรวจจับเวอร์ชันตามคำตอบของ Hermann Ingjaldsson แต่มีประสิทธิภาพมากกว่าและส่งคืนวัตถุที่มีชื่อ / เวอร์ชันข้อมูลอยู่ มันครอบคลุมเบราว์เซอร์หลัก ๆ แต่ฉันก็ไม่ได้ยุ่งกับมือถือและมือรอง:

function getBrowserData(nav) {
    var data = {};

    var ua = data.uaString = nav.userAgent;
    var browserMatch = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*([\d\.]+)/i) || [];
    if (browserMatch[1]) { browserMatch[1] = browserMatch[1].toLowerCase(); }
    var operaMatch = browserMatch[1] === 'chrome';
    if (operaMatch) { operaMatch = ua.match(/\bOPR\/([\d\.]+)/); }

    if (/trident/i.test(browserMatch[1])) {
        var msieMatch = /\brv[ :]+([\d\.]+)/g.exec(ua) || [];
        data.name = 'msie';
        data.version = msieMatch[1];
    }
    else if (operaMatch) {
        data.name = 'opera';
        data.version = operaMatch[1];
    }
    else if (browserMatch[1] === 'safari') {
        var safariVersionMatch = ua.match(/version\/([\d\.]+)/i);
        data.name = 'safari';
        data.version = safariVersionMatch[1];
    }
    else {
        data.name = browserMatch[1];
        data.version = browserMatch[2];
    }

    var versionParts = [];
    if (data.version) {
        var versionPartsMatch = data.version.match(/(\d+)/g) || [];
        for (var i=0; i < versionPartsMatch.length; i++) {
            versionParts.push(versionPartsMatch[i]);
        }
        if (versionParts.length > 0) { data.majorVersion = versionParts[0]; }
    }
    data.name = data.name || '(unknown browser name)';
    data.version = {
        full: data.version || '(unknown full browser version)',
        parts: versionParts,
        major: versionParts.length > 0 ? versionParts[0] : '(unknown major browser version)'
    };

    return data;
};

มันสามารถนำมาใช้เช่นนี้:

var brData = getBrowserData(window.navigator || navigator);
console.log('name: ' + brData.name);
console.log('major version: ' + brData.version.major);
// etc.

3
var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var fullVersion  = ''+parseFloat(navigator.appVersion);
var majorVersion = parseInt(navigator.appVersion,10);
var nameOffset,verOffset,ix;

// In Opera, the true version is after "Opera" or after "Version"

if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
 browserName = "Opera";
 fullVersion = nAgt.substring(verOffset+6);
 if ((verOffset=nAgt.indexOf("Version"))!=-1)
   fullVersion = nAgt.substring(verOffset+8);
}
// In MSIE, the true version is after "MSIE" in userAgent

else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
 browserName = "Microsoft Internet Explorer";
 fullVersion = nAgt.substring(verOffset+5);
}
// In Chrome, the true version is after "Chrome"

else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Safari, the true version is after "Safari" or after "Version"

else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
 browserName = "Safari";
 fullVersion = nAgt.substring(verOffset+7);
 if ((verOffset=nAgt.indexOf("Version"))!=-1)
   fullVersion = nAgt.substring(verOffset+8);
}
// In Firefox, the true version is after "Firefox"

else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, "name/version" is at the end of userAgent

else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) <
          (verOffset=nAgt.lastIndexOf('/')) )
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}

// trim the fullVersion string at semicolon/space if present

if ((ix=fullVersion.indexOf(";"))!=-1)
   fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(" "))!=-1)
   fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion);
 majorVersion = parseInt(navigator.appVersion,10);
}

document.write(''
 +'Browser name  = '+browserName+'<br>'
 +'Full version  = '+fullVersion+'<br>'
 +'Major version = '+majorVersion+'<br>'
 +'navigator.appName = '+navigator.appName+'<br>'
 +'navigator.userAgent = '+navigator.userAgent+'<br>'
)

ดูตัวอย่างได้ที่นี่ .. http://jsfiddle.net/hw4jM/3/


2

ฉันสร้างสคริปต์ในรหัส ASP เพื่อตรวจสอบเบราว์เซอร์เวอร์ชันของเบราว์เซอร์ระบบปฏิบัติการและเวอร์ชั่นของระบบปฏิบัติการ เหตุผลที่ฉันทำเช่นนี้ใน ASP เป็นเพราะฉันต้องการจัดเก็บข้อมูลในฐานข้อมูลบันทึก ดังนั้นฉันต้องตรวจสอบเซิร์ฟเวอร์เบราว์เซอร์

นี่คือรหัส:

on error resume next
ua = lcase(Request.ServerVariables("HTTP_USER_AGENT"))
moz = instr(ua,"mozilla")  
ffx = instr(ua,"firefox")  
saf = instr(ua,"safari")
crm = instr(ua,"chrome") 
max = instr(ua,"maxthon") 
opr = instr(ua,"opera")
ie4 = instr(ua,"msie 4") 
ie5 = instr(ua,"msie 5") 
ie6 = instr(ua,"msie 6") 
ie7 = instr(ua,"msie 7") 
ie8 = instr(ua,"trident/4.0")
ie9 = instr(ua,"trident/5.0")

if moz>0 then 
    BrowserType = "Mozilla"
    BrVer = mid(ua,moz+8,(instr(moz,ua," ")-(moz+8)))
end if
if ffx>0 then 
    BrowserType = "FireFox"
    BrVer = mid(ua,ffx+8)
end if
if saf>0 then 
    BrowserType = "Safari"
    BrVerPlass = instr(ua,"version")
    BrVer = mid(ua,BrVerPlass+8,(instr(BrVerPlass,ua," ")-(BrVerPlass+8)))
end if
if crm>0 then 
    BrowserType = "Chrome"
    BrVer = mid(ua,crm+7,(instr(crm,ua," ")-(crm+7)))
end if
if max>0 then 
    BrowserType = "Maxthon"
    BrVer = mid(ua,max+8,(instr(max,ua," ")-(max+8)))
end if
if opr>0 then 
    BrowserType = "Opera"
    BrVerPlass = instr(ua,"presto")
    BrVer = mid(ua,BrVerPlass+7,(instr(BrVerPlass,ua," ")-(BrVerPlass+7)))
end if
if ie4>0 then 
    BrowserType = "Internet Explorer"
    BrVer = "4"
end if
if ie5>0 then 
    BrowserType = "Internet Explorer"
    BrVer = "5"
end if
if ie6>0 then 
    BrowserType = "Internet Explorer"
    BrVer = "6"
end if
if ie7>0 then 
    BrowserType = "Internet Explorer"
    BrVer = "7"
end if
if ie8>0 then 
    BrowserType = "Internet Explorer"
    BrVer = "8"
    if ie7>0 then BrVer = BrVer & " (in IE7 compability mode)"
end if
if ie9>0 then 
    BrowserType = "Internet Explorer"
    BrVer = "9"
    if ie7>0 then BrVer = BrVer & " (in IE7 compability mode)"
    if ie8>0 then BrVer = BrVer & " (in IE8 compability mode)"
end if

OSSel = mid(ua,instr(ua,"(")+1,(instr(ua,";")-instr(ua,"("))-1)
OSver = mid(ua,instr(ua,";")+1,(instr(ua,")")-instr(ua,";"))-1)

if BrowserType = "Internet Explorer" then
    OSStart = instr(ua,";")
    OSStart = instr(OSStart+1,ua,";")        
    OSStopp = instr(OSStart+1,ua,";")
    OSsel = mid(ua,OSStart+2,(OSStopp-OSStart)-2)
end if

    Select case OSsel
        case "windows nt 6.1"
            OS = "Windows"
            OSver = "7"
        case "windows nt 6.0"
            OS = "Windows"
            OSver = "Vista"
        case "windows nt 5.2"
            OS = "Windows"
            OSver = "Srv 2003 / XP x64"
        case "windows nt 5.1"
            OS = "Windows"
            OSver = "XP"
        case else
            OS = OSSel
    End select

Response.write "<br>" & ua & "<br>" & BrowserType & "<br>" & BrVer & "<br>" & OS & "<br>" & OSver & "<br>"

'Use the variables here for whatever you need........

2

หน้านี้ดูเหมือนจะมีตัวอย่างที่ดีซึ่งใช้คุณสมบัติ appString และ appVersion เป็นทางเลือกสุดท้ายเนื่องจากอ้างว่าพวกเขาไม่น่าเชื่อถือกับเบราว์เซอร์บางตัว รหัสในหน้ามีดังนี้:

var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var fullVersion  = ''+parseFloat(navigator.appVersion); 
var majorVersion = parseInt(navigator.appVersion,10);
var nameOffset,verOffset,ix;

// In Opera 15+, the true version is after "OPR/" 
if ((verOffset=nAgt.indexOf("OPR/"))!=-1) {
 browserName = "Opera";
 fullVersion = nAgt.substring(verOffset+4);
}
// In older Opera, the true version is after "Opera" or after "Version"
else if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
 browserName = "Opera";
 fullVersion = nAgt.substring(verOffset+6);
 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In MSIE, the true version is after "MSIE" in userAgent
else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
 browserName = "Microsoft Internet Explorer";
 fullVersion = nAgt.substring(verOffset+5);
}
// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Safari, the true version is after "Safari" or after "Version" 
else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
 browserName = "Safari";
 fullVersion = nAgt.substring(verOffset+7);
 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In Firefox, the true version is after "Firefox" 
else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, "name/version" is at the end of userAgent 
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
          (verOffset=nAgt.lastIndexOf('/')) ) 
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}
// trim the fullVersion string at semicolon/space if present
if ((ix=fullVersion.indexOf(";"))!=-1)
   fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(" "))!=-1)
   fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion); 
 majorVersion = parseInt(navigator.appVersion,10);
}

document.write(''
 +'Browser name  = '+browserName+'<br>'
 +'Full version  = '+fullVersion+'<br>'
 +'Major version = '+majorVersion+'<br>'
 +'navigator.appName = '+navigator.appName+'<br>'
 +'navigator.userAgent = '+navigator.userAgent+'<br>'
)

2

การเพิ่มคำตอบของ Hermann ของฉันเอง ฉันต้องการการตรวจจับ OS เพื่อเพิ่มเข้ามา รวมถึงรหัส ES6 บางส่วน (เนื่องจากเรามี transpiler) ซึ่งคุณอาจจำเป็นต้องใช้ ES5-ify

detectClient() {
    let nav = navigator.appVersion,
        os = 'unknown',
        client = (() => {
            let agent = navigator.userAgent,
                engine = agent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [],
                build;

            if(/trident/i.test(engine[1])){
                build = /\brv[ :]+(\d+)/g.exec(agent) || [];
                return {browser:'IE', version:(build[1] || '')};
            }

            if(engine[1] === 'Chrome'){
                build = agent.match(/\bOPR\/(\d+)/);

                if(build !== null) {
                    return {browser: 'Opera', version: build[1]};
                }
            }

            engine = engine[2] ? [engine[1], engine[2]] : [navigator.appName, nav, '-?'];

            if((build = agent.match(/version\/(\d+)/i)) !== null) {
                engine.splice(1, 1, build[1]);
            }

            return {
              browser: engine[0],
              version: engine[1]
            };
        })();

    switch (true) {
        case nav.indexOf('Win') > -1:
            os = 'Windows';
        break;
        case nav.indexOf('Mac') > -1:
            os = 'MacOS';
        break;
        case nav.indexOf('X11') > -1:
            os = 'UNIX';
        break;
        case nav.indexOf('Linux') > -1:
            os = 'Linux';
        break;
    }        

    client.os = os;
    return client;
}

ผลตอบแทน: Object {browser: "Chrome", version: "50", os: "UNIX"}


2

ฉันต้องการแชร์รหัสนี้ฉันเขียนไว้สำหรับปัญหาที่ฉันต้องแก้ไข มันได้รับการทดสอบในเบราว์เซอร์หลัก ๆ และทำงานได้อย่างมีเสน่ห์สำหรับฉัน!

อาจดูเหมือนว่ารหัสนี้คล้ายกับคำตอบอื่น ๆ แต่มันปรับเปลี่ยนเพื่อให้ฉันสามารถใช้มันติดตั้งวัตถุเบราว์เซอร์ใน jquery ที่พลาดสำหรับฉันเมื่อเร็ว ๆ นี้แน่นอนมันเป็นการรวมกันจากรหัสข้างต้นมีการปรับปรุงเล็กน้อยจาก ฉันทำส่วนของฉัน:

(function($, ua){

var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [],
    tem, 
    res;

if(/trident/i.test(M[1])){
    tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
    res = 'IE ' + (tem[1] || '');
}
else if(M[1] === 'Chrome'){
    tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
    if(tem != null) 
        res = tem.slice(1).join(' ').replace('OPR', 'Opera');
    else
        res = [M[1], M[2]];
}
else {
    M = M[2]? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
    if((tem = ua.match(/version\/(\d+)/i)) != null) M = M.splice(1, 1, tem[1]);
    res = M;
}

res = typeof res === 'string'? res.split(' ') : res;

$.browser = {
    name: res[0],
    version: res[1],
    msie: /msie|ie/i.test(res[0]),
    firefox: /firefox/i.test(res[0]),
    opera: /opera/i.test(res[0]),
    chrome: /chrome/i.test(res[0]),
    edge: /edge/i.test(res[0])
}

})(typeof jQuery != 'undefined'? jQuery : window.$, navigator.userAgent);

 console.log($.browser.name, $.browser.version, $.browser.msie); 
// if IE 11 output is: IE 11 true

2

navigator.sayswho= (function(){
    var ua= navigator.userAgent, tem, 
    M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    if(M[1]=== 'Chrome'){
        tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
        if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
    }
    M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
    return M.join(' ');
})();

console.log(navigator.sayswho); // outputs: `Chrome 62`


1

ฉันใช้สิ่งนี้เพื่อรับชื่อและหมายเลข (int) ของเวอร์ชันของเบราว์เซอร์จริง:

function getInfoBrowser() {
    var ua = navigator.userAgent, tem,
    M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if (/trident/i.test(M[1])) {
        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
        return { name: 'Explorer', version: parseInt((tem[1] || '')) };
    }
    if (M[1] === 'Chrome') {
        tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
        if (tem != null) { let app = tem.slice(1).toString().split(','); return { name: app[0].replace('OPR', 'Opera'), version: parseInt(app[1]) }; }
    }
    M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
    if ((tem = ua.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]);
    return {
        name: M[0],
        version: parseInt(M[1])
    };
}

function getBrowser(){
  let info = getInfoBrowser();
  $("#i-name").html(info.name);
  $("#i-version").html(info.version);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="button" onclick="getBrowser();" value="Get Info Browser"/>
<hr/>
Name: <span id="i-name"></span><br/>
Version: <span id="i-version"></span>

การวิ่งครั้งนี้

โครเมียม ; Firefox; ซาฟารี; Internet Explorer (> = 9); โอเปร่า ขอบ

สำหรับฉัน.


1

ที่นี่มีความเข้ากันได้ดีขึ้นแล้ว @kennebec ตัวอย่าง
จะคืนชื่อเบราว์เซอร์และเวอร์ชัน (คืน 72 แทน 72.0.3626.96)

ทดสอบบน Safari, Chrome, Opera, Firefox, IE, Edge, UCBrowser และบนมือถือ

function browser() {
    var userAgent = navigator.userAgent,
        match = userAgent.match(/(opera|chrome|crios|safari|ucbrowser|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [],
        result = {},
        tem;

    if (/trident/i.test(match[1])) {
        tem = /\brv[ :]+(\d+)/g.exec(userAgent) || [];
        result.name = "Internet Explorer";
    } else if (match[1] === "Chrome") {
        tem = userAgent.match(/\b(OPR|Edge)\/(\d+)/);

        if (tem && tem[1]) {
            result.name = tem[0].indexOf("Edge") === 0 ? "Edge" : "Opera";
        }
    }
    if (!result.name) {
        tem = userAgent.match(/version\/(\d+)/i); // iOS support
        result.name = match[0].replace(/\/.*/, "");

        if (result.name.indexOf("MSIE") === 0) {
            result.name = "Internet Explorer";
        }
        if (userAgent.match("CriOS")) {
            result.name = "Chrome";
        }

    }
    if (tem && tem.length) {
        match[match.length - 1] = tem[tem.length - 1];
    }

    result.version = Number(match[match.length - 1]);

    return result;
}


0

ฉันเขียนสิ่งนี้เพื่อความต้องการของฉัน

มันได้รับข้อมูลเช่นถ้าเป็นอุปกรณ์มือถือหรือถ้ามีจอแสดงผลเรตินา

ลองมัน

var nav = {
        isMobile:function(){
            return (navigator.userAgent.match(/iPhone|iPad|iPod|Android|BlackBerry|Opera Mini|IEMobile/i) != null);
        },
        isDesktop:function(){
            return (navigator.userAgent.match(/iPhone|iPad|iPod|Android|BlackBerry|Opera Mini|IEMobile/i) == null);
        },
        isAndroid: function() {
            return navigator.userAgent.match(/Android/i);
        },
        isBlackBerry: function() {
            return navigator.userAgent.match(/BlackBerry/i);
        },
        isIOS: function() {
            return navigator.userAgent.match(/iPhone|iPad|iPod/i);
        },
        isOpera: function() {
            return navigator.userAgent.match(/Opera Mini/i);
        },
        isWindows: function() {
            return navigator.userAgent.match(/IEMobile/i);
        },
        isRetina:function(){
            return window.devicePixelRatio && window.devicePixelRatio > 1;
        },
        isIPad:function(){
            isIPad = (/ipad/gi).test(navigator.platform);
            return isIPad;
        },
        isLandscape:function(){
            if(window.innerHeight < window.innerWidth){
                return true;
            }
            return false;
        },
        getIOSVersion:function(){
            if(this.isIOS()){
                var OSVersion = navigator.appVersion.match(/OS (\d+_\d+)/i);
                OSVersion = OSVersion[1] ? +OSVersion[1].replace('_', '.') : 0;
                return OSVersion;
            }
            else
                return false;
        },
        isStandAlone:function(){
            if(_.is(navigator.standalone))
                return navigator.standalone;
            return false;
        },
        isChrome:function(){
            var isChrome = (/Chrome/gi).test(navigator.appVersion);
            var isSafari = (/Safari/gi).test(navigator.appVersion)
            return isChrome && isSafari;
        },
        isSafari:function(){
            var isSafari = (/Safari/gi).test(navigator.appVersion)
            var isChrome = (/Chrome/gi).test(navigator.appVersion)
            return !isChrome && isSafari;
        }
}

0

สำหรับแอปพลิเคชัน PWA ใด ๆ ที่ใช้มุมคุณสามารถใส่รหัสเพื่อตรวจสอบว่าเบราว์เซอร์รองรับหรือไม่อยู่ในส่วนเนื้อหาของ index.html -

<body>
    <div id="browser"></div>
    <script>
        var operabrowser = true;
        operabrowser = (navigator.userAgent.indexOf('Opera Mini') > -1);
        if (operabrowser) {
            txt = "<p>Browser not supported use different browser...</p>";
            document.getElementById("browser").innerHTML = txt;
        }
    </script>
</body>

-1

นี่คือรุ่น java สำหรับบางคนที่ต้องการทำในฝั่งเซิร์ฟเวอร์โดยใช้ String ที่ส่งคืนโดย HttpServletRequest.getHeader("User-Agent");

มันทำงานกับการกำหนดค่าเบราว์เซอร์ 70 แบบที่ฉันใช้ทำการทดสอบ

public static String decodeBrowser(String userAgent) {
    userAgent= userAgent.toLowerCase();
    String name = "unknown";
    String version = "0.0";
    Matcher userAgentMatcher = USER_AGENT_MATCHING_PATTERN.matcher(userAgent);
    if (userAgentMatcher.find()) {
      name = userAgentMatcher.group(1);
      version = userAgentMatcher.group(2);
      if ("trident".equals(name)) {
        name = "msie";
        Matcher tridentVersionMatcher = TRIDENT_MATCHING_PATTERN.matcher(userAgent);
        if (tridentVersionMatcher.find()) {
          version = tridentVersionMatcher.group(1);
        }
      }
    }
    return name + " " + version;
  }

  private static final Pattern USER_AGENT_MATCHING_PATTERN=Pattern.compile("(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*([\\d\\.]+)");
  private static final Pattern TRIDENT_MATCHING_PATTERN=Pattern.compile("\\brv[ :]+(\\d+(\\.\\d+)?)");

-1
var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName = navigator.appName;
var fullVersion = '' + parseFloat(navigator.appVersion);
var majorVersion = parseInt(navigator.appVersion, 10);
var nameOffset, verOffset, ix;

// In Opera 15+, the true version is after "OPR/" 
if ((verOffset = nAgt.indexOf("OPR/")) != -1) {
    browserName = "Opera";
    fullVersion = nAgt.substring(verOffset + 4);
}
// In older Opera, the true version is after "Opera" or after "Version"
else if ((verOffset = nAgt.indexOf("Opera")) != -1) {
    browserName = "Opera";
    fullVersion = nAgt.substring(verOffset + 6);
    if ((verOffset = nAgt.indexOf("Version")) != -1)
        fullVersion = nAgt.substring(verOffset + 8);
}
// In MSIE, the true version is after "MSIE" in userAgent
else if ((verOffset = nAgt.indexOf("MSIE")) != -1) {
    browserName = "Microsoft Internet Explorer";
    fullVersion = nAgt.substring(verOffset + 5);
}
// In Chrome, the true version is after "Chrome" 
else if ((verOffset = nAgt.indexOf("Chrome")) != -1) {
    browserName = "Google Chrome";
    fullVersion = nAgt.substring(verOffset + 7);
}
// In Safari, the true version is after "Safari" or after "Version" 
else if ((verOffset = nAgt.indexOf("Safari")) != -1) {
    browserName = "Safari";
    fullVersion = nAgt.substring(verOffset + 7);
    if ((verOffset = nAgt.indexOf("Version")) != -1)
        fullVersion = nAgt.substring(verOffset + 8);
}
// In Firefox, the true version is after "Firefox" 
else if ((verOffset = nAgt.indexOf("Firefox")) != -1) {
    browserName = "Mozilla Firefox";
    fullVersion = nAgt.substring(verOffset + 8);
}
// In most other browsers, "name/version" is at the end of userAgent 
else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
    browserName = nAgt.substring(nameOffset, verOffset);
    fullVersion = nAgt.substring(verOffset + 1);
    if (browserName.toLowerCase() == browserName.toUpperCase()) {
        browserName = navigator.appName;
    }
}
// trim the fullVersion string at semicolon/space if present
if ((ix = fullVersion.indexOf(';')) != -1) fullVersion = fullVersion.substring(0, ix);
if ((ix = fullVersion.indexOf(' ')) != -1) fullVersion = fullVersion.substring(0, ix);

majorVersion = parseInt('' + fullVersion, 10);
if (isNaN(majorVersion)) {
    fullVersion = '' + parseFloat(navigator.appVersion);
    majorVersion = parseInt(navigator.appVersion, 10);
}

2
คุณช่วยอธิบายรหัสของคุณพร้อมกับรหัสได้ไหม?
Yogesh Sharma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.