Detectarea browserului în JavaScript? [duplicat] (Programare, Javascript, Detectarea Browserului)

Probocop a intrebat.

Cum pot determina browserul exact și versiunea folosind JavaScript?

Comentarii

  • Asigurați-vă că nu vă bazați funcționalitatea critică pe acest test. –  > Por Joe Ratzer.
  • +1: întrebare bună din cauza detecției sugerate a suportului funcționalității, mai degrabă decât a extragerii numelui și a versiunii în răspunsuri. –  > Por Maxim Zaslavsky.
  • Iată un link mai bun pentru a explica detectarea obiectelor: quirksmode.org/js/support.html –  > Por kmote.
  • Răspunsuri relevante suplimentare pot fi găsite pe acest site și pe acest dupe –  > Por Matthijs Wessels.
26 răspunsuri
kennebec

După cum sugerează și numele, acest lucru vă va spune numele și numărul versiunii furnizate de browser.

Este util pentru sortarea rezultatelor testelor și erorilor, atunci când testați un cod nou pe mai multe browsere.

Comentarii

  • +1 și din partea mea. Uneori, nu este vorba despre suportul pentru caracteristici, ci de fapt despre browser. Da, informațiile despre user-agent pot fi falsificate, dar atunci când aveți de-a face cu browsere mai vechi și le ocoliți erorile (cum ar fi problema lui FF 3 de a nu trimite antetul Content-Length pentru mesajele AJAX POST doar pentru citire), suportul pentru caracteristici nu este suficient. –  > Por Cobra.
  • Ar fi frumos să cunoaștem toate rezultatele pe care le returnează această funcție… –  > Por Diego.
  • 35

  • Îmi place asta! Mulțumesc, omule! Totuși, am făcut doar o modificare la primul și penultimul rând. Am înlocuit: navigator.sayswho= cu navigator.browserInfo= pe prima linie pentru o mai bună lizibilitate (adică pentru a nu mă mai întreba peste câteva luni ce face în cod) și am înlocuit return M.join(' '); cu return { 'browser': M[0], 'version': M[1] }; astfel încât să-l pot folosi astfel în domeniul global: console.log(navigator.browserInfo.browser); și console.log(navigator.browserInfo.version); pentru o mai bună accesibilitate. Îmi pare rău, cred că m-am jucat cu el chiar dacă scria „Nu atingeți”. –  > Por racl101.
  • Testat doar pe Chrome deocamdată… dacă doriți să obțineți numărul complet al versiunii, schimbați regx-ul în (vivaldi|opera|chrome|safari|firefox|msie|trident(?=/))/?s*([0-9|.]+) diferența este ultima paranteză în loc de (d+) ar trebui să fie ([0-9|.]+) deci numărul și punctul. de asemenea, a adăugat browserul vivaldi doar în caz că 🙂 –  > Por Val.
  • Acest cod este greu de citit. Ce este tem? Ce este M? –  > Por kleinfreund.
arikan

Vă recomand să folosiți micuța bibliotecă javascript Bowser, da nu r. Se bazează pe navigator.userAgent și destul de bine testată pentru toate browserele, inclusiv iphone, android etc.

https://github.com/ded/bowser

Puteți folosi pur și simplu spuneți:

if (bowser.msie && bowser.version <= 6) {
  alert('Hello IE');
} else if (bowser.firefox){
  alert('Hello Foxy');
} else if (bowser.chrome){
  alert('Hello Chrome');
} else if (bowser.safari){
  alert('Hello Safari');
} else if(bowser.iphone || bowser.android){
  alert('Hello mobile');
}

Arun P Johny

Acesta este ceva ce am scris pentru a obține informații despre client

var ua = navigator.userAgent.toLowerCase();
var check = function(r) {
    return r.test(ua);
};
var DOC = document;
var isStrict = DOC.compatMode == "CSS1Compat";
var isOpera = check(/opera/);
var isChrome = check(/chrome/);
var isWebKit = check(/webkit/);
var isSafari = !isChrome && check(/safari/);
var isSafari2 = isSafari && check(/applewebkit/4/); // unique to
// Safari 2
var isSafari3 = isSafari && check(/version/3/);
var isSafari4 = isSafari && check(/version/4/);
var isIE = !isOpera && check(/msie/);
var isIE7 = isIE && check(/msie 7/);
var isIE8 = isIE && check(/msie 8/);
var isIE6 = isIE && !isIE7 && !isIE8;
var isGecko = !isWebKit && check(/gecko/);
var isGecko2 = isGecko && check(/rv:1.8/);
var isGecko3 = isGecko && check(/rv:1.9/);
var isBorderBox = isIE && !isStrict;
var isWindows = check(/windows|win32/);
var isMac = check(/macintosh|mac os x/);
var isAir = check(/adobeair/);
var isLinux = check(/linux/);
var isSecure = /^https/i.test(window.location.protocol);
var isIE7InIE8 = isIE7 && DOC.documentMode == 7;

var jsType = '', browserType = '', browserVersion = '', osName = '';
var ua = navigator.userAgent.toLowerCase();
var check = function(r) {
    return r.test(ua);
};

if(isWindows){
    osName = 'Windows';

    if(check(/windows nt/)){
        var start = ua.indexOf('windows nt');
        var end = ua.indexOf(';', start);
        osName = ua.substring(start, end);
    }
} else {
    osName = isMac ? 'Mac' : isLinux ? 'Linux' : 'Other';
} 

if(isIE){
    browserType = 'IE';
    jsType = 'IE';

    var versionStart = ua.indexOf('msie') + 5;
    var versionEnd = ua.indexOf(';', versionStart);
    browserVersion = ua.substring(versionStart, versionEnd);

    jsType = isIE6 ? 'IE6' : isIE7 ? 'IE7' : isIE8 ? 'IE8' : 'IE';
} else if (isGecko){
    var isFF =  check(/firefox/);
    browserType = isFF ? 'Firefox' : 'Others';;
    jsType = isGecko2 ? 'Gecko2' : isGecko3 ? 'Gecko3' : 'Gecko';

    if(isFF){
        var versionStart = ua.indexOf('firefox') + 8;
        var versionEnd = ua.indexOf(' ', versionStart);
        if(versionEnd == -1){
            versionEnd = ua.length;
        }
        browserVersion = ua.substring(versionStart, versionEnd);
    }
} else if(isChrome){
    browserType = 'Chrome';
    jsType = isWebKit ? 'Web Kit' : 'Other';

    var versionStart = ua.indexOf('chrome') + 7;
    var versionEnd = ua.indexOf(' ', versionStart);
    browserVersion = ua.substring(versionStart, versionEnd);
}else{
    browserType = isOpera ? 'Opera' : isSafari ? 'Safari' : '';
}

Comentarii

  • nu este un pic cam inutil să efectuezi întotdeauna toate verificările? pare inutil să verifici pentru Linux dacă știi că este un Windows, nu-i așa… –  > Por Matthias.
  • @Matthias, mulțumesc pentru sugestie. Voi încerca să optimizez soluția. Aceeași logică poate fi aplicată și în testarea pentru browsere. –  > Por Arun P Johny.
  • răspunsul tău este cel mai bun pe care l-ar putea da cineva…thx.Made my life easy –  > Por HIRA THAKUR.
  • @ArunPJohny: +1, pentru acele momente oribile și rare în care nu ai de ales decât să detectezi browserul mai degrabă decât să detectezi funcția. Țineți acest lucru la zi, poate într-un proiect OS undeva? Evident, de când ai scris acest răspuns, IE a încetat să mai spună MSIE, de exemplu… –  > Por T.J. Crowder.
  • tot ce văd este var var var var var var ... Vă rog, viitorii programatori care vedeți asta, să nu faceți asta. Chiar nu este necesar și este o pacoste pentru managerii de proiect cu TOC-uri de citit. –  > Por SpYk3HH.
pilau

Iată cum să detectați browserele în 2016, inclusiv Microsoft Edge, Safari 10 și detectarea Blink:

// Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+
isFirefox = typeof InstallTrigger !== 'undefined';
// Safari 3.0+
isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);
// Internet Explorer 6-11
isIE = /*@[email protected]*/false || !!document.documentMode;
// Edge 20+
isEdge = !isIE && !!window.StyleMedia;
// Chrome 1+
isChrome = !!window.chrome && !!window.chrome.webstore;
// Blink engine detection
isBlink = (isChrome || isOpera) && !!window.CSS;

Frumusețea acestei abordări este că se bazează pe proprietățile motorului de browser, astfel încât acoperă chiar și browserele derivate, cum ar fi Yandex sau Vivaldi, care sunt practic compatibile cu browserele majore ale căror motoare le folosesc. Excepție face Opera, care se bazează pe adulmecarea agentului utilizatorului, dar în prezent (adică ver. 15 și mai sus) chiar și Opera este în sine doar o coajă pentru Blink.

Comentarii

  • Singurul răspuns corect din această pagină. Obiectul Navigator nu mai este fiabil după ultimele versiuni IE. –  > Por derloopkat.
  • Aruncați o privire la acest alt răspuns pentru documentație despre ce se bazează aceste teste: stackoverflow.com/a/9851769/726097 –  > Por einjohn.
  • @einjohn Scris tot de mine 😀 Frumos din partea ta că ai făcut link! –  > Por pilau.
  • window.chrome.webstore este depreciat începând cu 06/12/2018, deci va fi evaluat ca fiind fals și detecția chrome s-ar întrerupe. –  > Por Mihaly KR.
  • @MihalyKR mulțumesc, am lucrat la o soluție, voi actualiza în curând. –  > Por pilau.
Phil Rykoff

De obicei, cel mai bine este să evitați codul specific browserului atunci când este posibil. JQuery $.support este disponibilă pentru detectarea suportului pentru anumite caracteristici, mai degrabă decât să se bazeze pe numele și versiunea browserului.

În Opera, de exemplu, puteți falsifica o instanță de Internet Explorer sau Firefox.

O descriere detaliată a JQuery.support poate fi găsită aici: http://api.jquery.com/jQuery.support/

Acum depreciat conform jQuery.

Recomandăm cu tărie utilizarea unei biblioteci externe, cum ar fi Modernizr în locul dependenței de proprietățile din jQuery.support.

Atunci când codific site-uri web, mă asigur întotdeauna că funcționalitatea de bază, cum ar fi navigarea, este accesibilă și pentru utilizatorii care nu folosesc JS. Acest lucru poate fi subiect de discuție și poate fi ignorat dacă pagina de pornire este destinată unui public special.

Comentarii

    21

  • Uneori chiar trebuie să cunoașteți browserul, atunci când aceleași funcționalități sunt suportate într-un mod diferit. Astfel, dacă se utilizează jQuery, $.browser este calea corectă, așa cum a indicat utilizatorul288744 –  > Por Bogdan D.
  • 31

  • Uneori chiar trebuie să știți versiunea browserului. Vă rugăm să vă asigurați că răspundeți la întrebarea care a fost pusă. –  > Por Louis Chatriot.
  • @PhilRykoff – dar nu răspundeți la cazul de 99% al întrebării – răspundeți la cazul de 99% al unei alte întrebări, pe care presupuneți că cel care a pus întrebarea a vrut să o pună sau ar fi trebuit să o pună. Poate cereți mai întâi o clarificare? –  > Por Spike0xff.
  • @Phil, ai dreptate că uneori cel mai bun răspuns este unul pe care cel care a pus întrebarea nici măcar nu l-a întrebat. Cu toate acestea, nu sunt de acord cu aplicarea ta a acestei teorii la această întrebare. Luați în considerare window.onpopstate (și vă rugăm să vă amintiți că un răspuns non-jQuery este cel mai ideal pentru o întrebare care nu menționează niciodată jQuery) — IE nu îl lansează pentru vizualizarea inițială, spre deosebire de alte browsere. Uneori, pentru a fi robust, trebuie să luați în considerare cu ce browser aveți de-a face pentru a implementa corect o caracteristică. Având în vedere titlul acestei întrebări, aceasta este tocmai informația la care ne-am aștepta, iar la dumneavoastră nu există. –  > Por Kirk Woll.
  • Uh, nu-mi place să spun asta, dar CÂND, în afară de testarea codului dvs. cu mai multe browsere în scopuri de compatibilitate, veți falsifica în alt mod configurația browserului dvs.? –  > Por Eliseo D’Annunzio.
malcolmX

Aceasta vă spune toate detaliile despre browserul dvs. și versiunea acestuia.

<!DOCTYPE html>
<html>
<body>
<div id="example"></div>

<script>

txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";
txt+= "<p>User-agent language: " + navigator.systemLanguage + "</p>";

document.getElementById("example").innerHTML=txt;

</script>

</body>
</html>

Comentarii

  • Este suportat pe toate platformele? –  > Por TheBlackBenzKid.
  • am verificat în Firefox, IE și Chrome…. funcționează acolo…. vă rog să-mi spuneți părerea dumneavoastră –  > Por malcolmX.
  • Se pare că toate browserele mele sunt Netscape. Fie codul tău e nașpa, fie sunt eu drogat –  > Por erdomester.
  • ‘funcționează pe mașina mea’ nu este o abordare acceptabilă a dezvoltării web. –  > Por OZ_.
  • Aceste metode sunt depreciate și nu ar trebui să fie folosite. –  > Por Levi Morrison.
Andrew

Toate informațiile despre browserul web sunt conținute în obiectul navigator. Numele și versiunea se află acolo.

var appname = window.navigator.appName;

Sursă: detectarea browserului javascript

Comentarii

    33

  • Chrome spune „Netscape” –  > Por Incognito.
  • Firefox 20.0.1 pe XP spune și el „Netscape”. –  > Por Metalcoder.
  • Firefox & Chrome spune „Netscape”. IE 8 nu spune nimic! –  > Por Patrick Keane.
  • încercați appcodename w3schools.com/jsref/prop_nav_appcodename.asp –  > Por George.
  • appCodeName = Mozilla și appName = Netscape în chrome 33 –  > Por Natwar Singh.
Wayne Bulmer
//Copy and paste this into your code/text editor, and try it

//Before you use this to fix compatability bugs, it's best to try inform the browser provider that you have found a bug and there latest browser may not be up to date with the current web standards

//Since none of the browsers use the browser identification system properly you need to do something a bit like this

//Write browser identification
document.write(navigator.userAgent + "<br>")

//Detect browser and write the corresponding name
if (navigator.userAgent.search("MSIE") >= 0){
    document.write('"MS Internet Explorer ');
    var position = navigator.userAgent.search("MSIE") + 5;
    var end = navigator.userAgent.search("; Windows");
    var version = navigator.userAgent.substring(position,end);
    document.write(version + '"');
}
else if (navigator.userAgent.search("Chrome") >= 0){
document.write('"Google Chrome ');// For some reason in the browser identification Chrome contains the word "Safari" so when detecting for Safari you need to include Not Chrome
    var position = navigator.userAgent.search("Chrome") + 7;
    var end = navigator.userAgent.search(" Safari");
    var version = navigator.userAgent.substring(position,end);
    document.write(version + '"');
}
else if (navigator.userAgent.search("Firefox") >= 0){
    document.write('"Mozilla Firefox ');
    var position = navigator.userAgent.search("Firefox") + 8;
    var version = navigator.userAgent.substring(position);
    document.write(version + '"');
}
else if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0){//<< Here
    document.write('"Apple Safari ');
    var position = navigator.userAgent.search("Version") + 8;
    var end = navigator.userAgent.search(" Safari");
    var version = navigator.userAgent.substring(position,end);
    document.write(version + '"');
}
else if (navigator.userAgent.search("Opera") >= 0){
    document.write('"Opera ');
    var position = navigator.userAgent.search("Version") + 8;
    var version = navigator.userAgent.substring(position);
    document.write(version + '"');
}
else{
    document.write('"Other"');
}

//Use w3schools research the `search()` method as other methods are availible

Comentarii

  • Vă rugăm să nu recomandați w3schools –  > Por iConnor.
  • Și, la fel ca un miliard de alte fragmente de cod de acest fel, acest lucru eșuează pe IE 11 (și, probabil, pe versiunile ulterioare). –  > Por Spike0xff.
  • „nedefinit” în Chrome. –  > Por OZ_.
ghiscoding

De când a apărut Internet Explorer 11 (IE11+) și nu mai folosește numele tag-ului de MSIE mai nou, am venit cu o variantă a unei funcții de detecție mai vechi:

navigator.sayswho= (function(){
    var N= navigator.appName, ua= navigator.userAgent, tem;

    // if IE11+
    if (new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})").exec(ua) !== null) {
        var M= ["Internet Explorer"];
        if(M && (tem= ua.match(/rv:([0-9]{1,}[.0-9]{0,})/))!= null) M[2]= tem[1];
        M= M? [M[0], M[2]]: [N, navigator.appVersion,'-?'];
        return M;
    }

    var M= ua.match(/(opera|chrome|safari|firefox|msie)/?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;
})();

user2183078

Din păcate, IE11 nu mai are MSIE în pagina sa navigator.userAgent:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; .NET4.0C; BRI/2; BOIE9;ENUS; rv:11.0) like Gecko

În ceea ce privește motivul pentru care vrei să știi ce browser folosești, este pentru că fiecare browser are propriul set de bug-uri și ajungi să implementezi soluții de rezolvare specifice fiecărui browser și versiune, sau să îi spui utilizatorului să folosească un alt browser!

Comentarii

  • Acesta este un fel de scop pentru care oamenii ar folosi acest lucru. Dacă știu că nu vor suporta IE, detectează acest lucru și îi anunță. –  > Por user6031759.
ЯegDwight
var browser = navigator.appName;
var version = navigator.appVersion;

Rețineți, totuși, că ambele nu vor reflecta neapărat adevărul. Multe browsere pot fi setate să se mascheze ca alte browsere. Astfel, de exemplu, nu puteți fi întotdeauna sigur dacă un utilizator navighează de fapt cu IE6 sau cu Opera care pretinde a fi IE6.

Comentarii

  • +1: contrar votului negativ anterior, în teorie, aceasta este calea corectă; în practică, furnizorii de browsere umplu aceste valori cu conținut îndoielnic; consultați documentele de la MDC ( developer.mozilla.org/En/DOM/Window.navigator ) și MSDN ( msdn.microsoft.com/en-us/library/ms535867%28VS.85%29.aspx ); Google m-a condus și la următoarea pagină (depășită, nu există încă Chrome), care arată că în principal Safari este cel care raportează gunoi: javascriptkit.com/jsref/navigator.shtml –  > Por Christoph.
  • În teorie, nici măcar nu este calea corectă – a se vedea secțiunea 6.5.1.1 Identificarea clientului din specificația HTML5, care spune despre navigator.appName: Trebuie să returneze fie șirul „Netscape”, fie numele complet al browserului, de exemplu „Mellblom Browsernator”. Cu alte cuvinte, standardul HTML5 nici măcar nu pretinde să solicite ca appName să aibă o valoare semnificativă. –  > Por Spike0xff.
  • @Spike0xff acest răspuns datează dintr-o perioadă în care nimeni nu folosea HTML5 sau chiar nu auzise de el. –  > Por ЯegDwight.
  • @ЯegDwight (sau ar trebui să spun Elton?): navigator.appName a fost "Netscape" sau nimic pe aproape toate browserele dintotdeauna, cu mult înainte ca specificația HTML5 să codifice această practică. –  > Por T.J. Crowder.
  • php utilizează opțional un browsercap.ini pentru a face acest lucru. Puteți descărca ?all? șirul posibil de agenți utilizator de pe browscap.org . Veți vedea că este foarte complex. În plus, toate anteturile care încep cu HTTP_ pot fi falsificate. –  > Por B.F..
Fabien Ménager

Acest mică bibliotecă vă poate fi de ajutor. Dar fiți atenți la faptul că detectarea browserului nu este întotdeauna o soluție.

Comentarii

  • atunci, care este soluția ? cum poți face un stil/funcționalitate care să depindă de browser sau de versiunea acestuia ? –  > Por Francisco Corrales Morales.
Francisco Corrales Morales

Iată cum fac eu CSS personalizat pentru Internet Explorer:

În fișierul meu JavaScript:

function isIE () {
      var myNav = navigator.userAgent.toLowerCase();
      return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

jQuery(document).ready(function(){
    if(var_isIE){
            if(var_isIE == 10){
                jQuery("html").addClass("ie10");
            }
            if(var_isIE == 8){
                jQuery("html").addClass("ie8");
                // you can also call here some function to disable things that 
                //are not supported in IE, or override browser default styles.
            }
        }
    });

Și apoi în fișierul meu CSS, definește fiecare stil diferit:

.ie10 .some-class span{
    .......
}
.ie8 .some-class span{
    .......
}

Shafiqul Islam

Dacă doriți o funcție care să returneze atât browserul, cât și versiunea, iată o îmbunătățire a răspunsului inițial:

navigator.browserInfo = 
(
    function()
    {
        var browser = '';
        var version = '';
        var idString = '';

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

        //IE will be identified as 'Trident' and a different version number. The name must be corrected to 'Internet Explorer' and the correct version identified.
        //ie correction
        if(/trident/i.test(M[1]))
        {
            tem = /brv[ :]+(d+.?d*)/g.exec(ua) || [];
            browser = 'Internet Explorer';
            version = tem[1];
        }

        //firefox
        else if(/firefox/i.test(M[1]))
        {
            tem = /brv[ :]+(d+.?d*)/g.exec(ua) || [];
            browser = 'Firefox';
            version = tem[1];
        }

        //safari
        else if(/safari/i.test(M[1]))
        {
            tem = ua.match(/bVersion/(d+.?d*s*w+)/);
            browser = 'Safari';
            version = tem[1];
        }

        //If 'Chrome' is found, it may be another browser. 
        else if(M[1] === 'Chrome')
        {
            //opera
            var temOpr = ua.match(/b(OPR)/(d+.?d*.?d*.?d*)/);
            //edge
            var temEdge = ua.match(/b(Edge)/(d+.?d*)/);
            //chrome
            var temChrome = ua.match(/b(Chrome)/(d+.?d*.?d*.?d*)/);

            //a genuine 'Chrome' reading will result from ONLY temChrome not being null.
            var genuineChrome = temOpr == null && temEdge == null && temChrome != null;

            if(temOpr != null)
            {
                browser = temOpr[1].replace('OPR', 'Opera');
                version = temOpr[2];
            }

            if(temEdge != null)
            {
                browser = temEdge[1];
                version = temEdge[2];
            }

            if(genuineChrome)
            {
                browser = temChrome[1];
                version = temChrome[2];
            }
        }
        //There will be some odd balls, so if you wish to support those browsers, add functionality to display those browsers as well.

        if(browser == '' || version == '')
        {
            idString = 'We couldn't find your browser, but you can still use the site';
        }
        else
        {
            idString = browser + ' version ' + version;
        }

        alert('Your browser is ' + idString);

        //store the type of browser locally
        if(typeof(Storage) !== "undefined")
        {
            //Store
            localStorage.setItem('browser', browser);
            localStorage.setItem('version', version);
        } 
        else
        {
            alert('local storage not available');
        }
    }
)();

Cu aceasta, stochează, de asemenea, rezultatul la nivel local, astfel încât această verificare nu este necesar să fie executată de fiecare dată.

Comentarii

  • Aceasta este aproape o copie exactă a răspunsului acceptat. Rețineți că soluția lui @kennebec returnează numele browserului și versiunea, în timp ce această versiune returnează doar numele browserului. –  > Por smholloway.
Downgoat

În loc să codificați hardcoding browsere web, puteți scana agentul utilizatorului pentru a găsi numele browserului:

navigator.userAgent.split(')').reverse()[0].match(/(?!Gecko|Version|[A-Za-z]+?Web[Kk]it)[A-Z][a-z]+/g)[0]

Am testat acest lucru pe Safari, Chrome și Firefox. Anunțați-mă dacă ați constatat că acest lucru nu funcționează pe un browser.

  • Safari: "Safari"
  • Chrome: "Chrome"
  • Firefox: "Firefox"

Puteți chiar să modificați acest lucru pentru a obține versiunea browserului, dacă doriți. Rețineți că există modalități mai bune de a obține versiunea browserului

navigator.userAgent.split(')').reverse()[0].match(/(?!Gecko|Version|[A-Za-z]+?Web[Kk]it)[A-Z][a-z]+/[d.]+/g)[0].split('/')

Exemplu de ieșire:

Firefox/39.0    

Comentarii

  • Nu funcționează bine cu unele browsere diferite – indică UCBrowser ca fiind Chrome, chiar și atunci când este în modul de compatibilitate IE, lol –  > Por Malavos.
oriadam

Aceasta este ceea ce folosesc:

var ua = navigator.userAgent;
var info = {
        browser: /Edge/d+/.test(ua) ? 'ed' : /MSIE 9/.test(ua) ? 'ie9' : /MSIE 10/.test(ua) ? 'ie10' : /MSIE 11/.test(ua) ? 'ie11' : /MSIEsd/.test(ua) ? 'ie?' : /rv:11/.test(ua) ? 'ie11' : /FirefoxWd/.test(ua) ? 'ff' : /Chrom(e|ium)Wd|CriOSWd/.test(ua) ? 'gc' : /bSafariWd/.test(ua) ? 'sa' : /bOperaWd/.test(ua) ? 'op' : /bOPRWd/i.test(ua) ? 'op' : typeof MSPointerEvent !== 'undefined' ? 'ie?' : '',
        os: /Windows NT 10/.test(ua) ? "win10" : /Windows NT 6.0/.test(ua) ? "winvista" : /Windows NT 6.1/.test(ua) ? "win7" : /Windows NT 6.d/.test(ua) ? "win8" : /Windows NT 5.1/.test(ua) ? "winxp" : /Windows NT [1-5]./.test(ua) ? "winnt" : /Mac/.test(ua) ? "mac" : /Linux/.test(ua) ? "linux" : /X11/.test(ua) ? "nix" : "",
        touch: 'ontouchstart' in document.documentElement,
        mobile: /IEMobile|Windows Phone|Lumia/i.test(ua) ? 'w' : /iPhone|iP[oa]d/.test(ua) ? 'i' : /Android/.test(ua) ? 'a' : /BlackBerry|PlayBook|BB10/.test(ua) ? 'b' : /Mobile Safari/.test(ua) ? 's' : /webOS|Mobile|Tablet|Opera Mini|bCrMo/|Opera Mobi/i.test(ua) ? 1 : 0,
        tablet: /Tablet|iPad/i.test(ua),
};

info proprietăți:

  • browser: gc pentru Google Chrome; ie9ie11 pentru IE; ie? pentru IE vechi sau necunoscut; ed pentru Edge; ff pentru Firefox; sa pentru Safari; op pentru Opera.
  • os: mac win7 win8 win10 winnt winxp winvista linux nix
  • mobile: a pentru Android; i pentru iOS (iPhone iPad); w pentru Windows Phone; b pentru Blackberry; s pentru telefoanele mobile nedetectate care rulează Safari; 1 pentru alte dispozitive mobile nedetectate; 0 pentru dispozitive nemobile
  • touch: true pentru dispozitive cu touch, inclusiv laptopuri/notebook-uri cu touch care au atât mouse, cât și touch împreună; false pentru dispozitive care nu acceptă funcția tactilă
  • tablet: true sau false

https://jsfiddle.net/oriadam/ncb4n882/

utilizator288744

Ați putea folosi biblioteca jQuery pentru a detecta versiunea browserului.

Exemplu:

jQuery.browser.version

Cu toate acestea, acest lucru are sens doar dacă folosiți și alte funcții ale jQuery. Adăugarea unei întregi biblioteci doar pentru a detecta browserul mi se pare exagerată.

Mai multe informații:http://api.jquery.com/jQuery.browser/

(trebuie să derulați puțin în jos)

Comentarii

  • Tocmai am încercat pe win 8 chrome 25 și ie 10. Ei bine, eșuează complet. După 3 ani orice suport actual ar fi binevenit. –  > Por Cihad Turhan.
  • Această caracteristică a fost depreciată la jQuery 1.3, iar în cele din urmă a fost eliminată la jQuery 1.9. Deci, cel mai bine este să nu vă bazați pe ea. –  > Por Metalcoder.
chetan singhal
 var isOpera = !!window.opera || navigator.userAgent.indexOf('Opera') >= 0;
        // Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
        var isFirefox = typeof InstallTrigger !== 'undefined';   // Firefox 1.0+
        var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
        // At least Safari 3+: "[object HTMLElementConstructor]"
        var isChrome = !!window.chrome;                          // Chrome 1+
        var isIE = /*@[email protected]*/false; 

mai puteți citiCum să detectați browserul Safari, Chrome, IE, Firefox și Opera?

SpYk3HH

Știu că sunt WAY târziu la această întrebare, dar m-am gândit să-mi arunc fragmentele mele aici. Multe dintre răspunsurile de aici sunt OK și, după cum subliniază unul dintre ei, în general este mai bine să folosiți feature detection mai degrabă decât să se bazeze pe userAgent șir. Cu toate acestea, dacă aveți de gând să mergeți pe această cale, am scris un fragment complet, precum și o implementare alternativă jQuery pentru a înlocui deprinsul $.browser.


Vanilla JS

Primul meu fragment adaugă pur și simplu patru proprietăți la navigator obiect: browser, , version, , mobile, , & webkit.

jsFiddle


/** navigator [extended]
 *  Simply extends Browsers navigator Object to include browser name, version number, and mobile type (if available).
 *
 *  @property {String} browser The name of the browser.
 *  @property {Double} version The current Browser version number.
 *  @property {String|Boolean} mobile Will be `false` if is not found to be mobile device. Else, will be best guess Name of Mobile Device (not to be confused with browser name)
 *  @property {Boolean} webkit If is webkit or not.
 */
;(function(){function c(){try{switch(!0){case /MSIE|Trident/i.test(navigator.userAgent):return"MSIE";case /Chrome/.test(navigator.userAgent):return"Chrome";case /Opera/.test(navigator.userAgent):return"Opera";case /Kindle|Silk|KFTT|KFOT|KFJWA|KFJWI|KFSOWI|KFTHWA|KFTHWI|KFAPWA|KFAPWI/i.test(navigator.userAgent):return/Silk/i.test(navigator.userAgent)?"Silk":"Kindle";case /BlackBerry/.test(navigator.userAgent):return"BlackBerry";case /PlayBook/.test(navigator.userAgent):return"PlayBook";case /BB[0-9]{1,}; Touch/.test(navigator.userAgent):return"Blackberry";
case /Android/.test(navigator.userAgent):return"Android";case /Safari/.test(navigator.userAgent):return"Safari";case /Firefox/.test(navigator.userAgent):return"Mozilla";case /Nokia/.test(navigator.userAgent):return"Nokia"}}catch(a){console.debug("ERROR:setBrowsert",a)}}function d(){try{switch(!0){case /Sony[^ ]*/i.test(navigator.userAgent):return"Sony";case /RIM Tablet/i.test(navigator.userAgent):return"RIM Tablet";case /BlackBerry/i.test(navigator.userAgent):return"BlackBerry";case /iPhone/i.test(navigator.userAgent):return"iPhone";
case /iPad/i.test(navigator.userAgent):return"iPad";case /iPod/i.test(navigator.userAgent):return"iPod";case /Opera Mini/i.test(navigator.userAgent):return"Opera Mini";case /IEMobile/i.test(navigator.userAgent):return"IEMobile";case /BB[0-9]{1,}; Touch/i.test(navigator.userAgent):return"BlackBerry";case /Nokia/i.test(navigator.userAgent):return"Nokia";case /Android/i.test(navigator.userAgent):return"Android"}}catch(a){console.debug("ERROR:setMobilet",a)}return!1}function e(){try{switch(!0){case /MSIE|Trident/i.test(navigator.userAgent):return/Trident/i.test(navigator.userAgent)&&
/rv:([0-9]{1,}[.0-9]{0,})/.test(navigator.userAgent)?parseFloat(navigator.userAgent.match(/rv:([0-9]{1,}[.0-9]{0,})/)[1].replace(/[^0-9.]/g,"")):/MSIE/i.test(navigator.userAgent)&&0<parseFloat(navigator.userAgent.split("MSIE")[1].replace(/[^0-9.]/g,""))?parseFloat(navigator.userAgent.split("MSIE")[1].replace(/[^0-9.]/g,"")):"Edge";case /Chrome/.test(navigator.userAgent):return parseFloat(navigator.userAgent.split("Chrome/")[1].split("Safari")[0].replace(/[^0-9.]/g,""));case /Opera/.test(navigator.userAgent):return parseFloat(navigator.userAgent.split("Version/")[1].replace(/[^0-9.]/g,
""));case /Kindle|Silk|KFTT|KFOT|KFJWA|KFJWI|KFSOWI|KFTHWA|KFTHWI|KFAPWA|KFAPWI/i.test(navigator.userAgent):if(/Silk/i.test(navigator.userAgent))return parseFloat(navigator.userAgent.split("Silk/")[1].split("Safari")[0].replace(/[^0-9.]/g,""));if(/Kindle/i.test(navigator.userAgent)&&/Version/i.test(navigator.userAgent))return parseFloat(navigator.userAgent.split("Version/")[1].split("Safari")[0].replace(/[^0-9.]/g,""));case /BlackBerry/.test(navigator.userAgent):return parseFloat(navigator.userAgent.split("/")[1].replace(/[^0-9.]/g,
""));case /PlayBook/.test(navigator.userAgent):case /BB[0-9]{1,}; Touch/.test(navigator.userAgent):case /Safari/.test(navigator.userAgent):return parseFloat(navigator.userAgent.split("Version/")[1].split("Safari")[0].replace(/[^0-9.]/g,""));case /Firefox/.test(navigator.userAgent):return parseFloat(navigator.userAgent.split(/Firefox//i)[1].replace(/[^0-9.]/g,""));case /Android/.test(navigator.userAgent):return parseFloat(navigator.userAgent.split("Version/")[1].split("Safari")[0].replace(/[^0-9.]/g,
""));case /Nokia/.test(navigator.userAgent):return parseFloat(navigator.userAgent.split("Browser")[1].replace(/[^0-9.]/g,""))}}catch(a){console.debug("ERROR:setVersiont",a)}}a:{try{if(navigator&&navigator.userAgent){navigator.browser=c();navigator.mobile=d();navigator.version=e();var b;b:{try{b=/WebKit/i.test(navigator.userAgent);break b}catch(a){console.debug("ERROR:setWebkitt",a)}b=void 0}navigator.webkit=b;break a}}catch(a){}throw Error("Browser does not support `navigator` Object |OR| has undefined `userAgent` property.");
}})();
/*  simple c & p of above   */

Comentarii

  • Am încercat codul tău (Vanilla JS)… când am încercat cu Firefox și Opera din browserul mobil nu a dat rezultatul corect –  > Por Raja Dhasan.
  • @RajaDhasan Versiunea Vanilla a fost actualizată. Încearcă acum. –  > Por SpYk3HH.
  • Funcționează perfect din browserul web .. dar când am încercat de pe telefonul mobil android pentru browserul chrome se imprimă Android și pentru opera se imprimă chrome –  > Por Raja Dhasan.
Juvenik
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
    // Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
var isFirefox = typeof InstallTrigger !== 'undefined';   // Firefox 1.0+
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
    // At least Safari 3+: "[object HTMLElementConstructor]"
var isChrome = !!window.chrome && !isOpera;              // Chrome 1+
var isIE = /*@[email protected]*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
// Chrome 1+
var output = 'Detecting browsers by ducktyping:<hr>';
output += 'isFirefox: ' + isFirefox + '<br>';
output += 'isChrome: ' + isChrome + '<br>';
output += 'isSafari: ' + isSafari + '<br>';
output += 'isOpera: ' + isOpera + '<br>';
output += 'isIE: ' + isIE + '<br>';
output += 'isIE Edge: ' + isEdge + '<br>';
document.body.innerHTML = output;

Christoph

Nu este exact ceea ce doriți, dar aproape de ea:

var jscriptVersion = /*@cc_on @if(@_jscript) @_jscript_version @else @*/ false /*@end @*/;
var geckoVersion = navigator.product === 'Gecko' && navigator.productSub;
var operaVersion = 'opera' in window && 'version' in opera && opera.version();

Variabilele vor conține versiunea corespunzătoare sau false dacă aceasta nu este disponibilă.

Aș aprecia dacă cineva care folosește Chrome ar putea afla dacă se poate folosi window.chrome într-un mod similar cu window.opera.

Christiyan

Uneori avem nevoie de o metodă simplă pentru a verifica dacă browserul este IE sau nu. Iată cum ar putea fi:

 var isMSIE = (/trident/i).test(navigator.userAgent);

 if(isMSIE)
 {
  /* do something for ie */
 }
 else
 {
  /* do something else */
 }

sau metoda simplificată a lui siva:

 if(!!navigator.systemLanguage)
 {
  /* do something for ie */
 }
 else
 {
  /* do something else */
 }

Verificarea MSIE v.11:

if( (/trident/i).test(navigator.userAgent) && (/rv:/i).test(navigator.userAgent) )
{
  /* do something for ie 11 */
}

alte browsere IE conțin șirul MSIE în proprietatea lor userAgent și pot fi detectate de aceasta.

Comentarii

  • Conform multor alte răspunsuri la această întrebare, este mult mai bine să se facă detectarea caracteristicilor decât detectarea browserului. –  > Por Ruskin.
  • Alte modalități de detectare a browserelor IE, inclusiv detectarea atât a caracteristicilor, cât și a șirului ie în user agent. if( (/MSIE/i).test(navigator.userAgent) && !!window.MSInputMethodContext ) { /* ie check */ } sau if( !!window.MSInputMethodContext ) { /* ie 11 check */ } –  > Por Christiyan.
siva

Am găsit ceva interesant și o modalitate mai rapidă.IE suportă navigator.systemLanguage care returnează „en-US” acolo unde alte browsere returnează undefined.

<script>
    var lang = navigator.systemLanguage;
    if (lang!='en-US'){document.write("Well, this is not internet explorer");}
    else{document.write("This is internet explorer");}
</script>

Alex

Am făcut această mică funcție, sper că vă ajută. Aici puteți găsi cea mai recentă versiune browserDetection

function detectBrowser(userAgent){
  var chrome  = /.*(Chrome/).*(Safari/).*/g;
  var firefox = /.*(Firefox/).*/g;
  var safari  = /.*(Version/).*(Safari/).*/g;
  var opera   = /.*(Chrome/).*(Safari/).*(OPR/).*/g

  if(opera.exec(userAgent))
    return "Opera"
  if(chrome.exec(userAgent))
    return "Chrome"
  if(safari.exec(userAgent))
    return "Safari"
  if(firefox.exec(userAgent))
    return "Firefox"
}

Rinoy Ashokan

Fragmentul de cod de mai jos va arăta cum puteți afișa elementele de interfață în funcție de versiunea IE și de browser

$(document).ready(function () {

var msiVersion = GetMSIieversion();
if ((msiVersion <= 8) && (msiVersion != false)) {

    //Show UI elements specific to IE version 8 or low

    } else {
    //Show UI elements specific to IE version greater than 8 and for other browser other than IE,,ie..Chrome,Mozila..etc
    }
}
);

Codul de mai jos va arăta cum putem obține versiunea IE

function GetMSIieversion() {

var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}

var trident = ua.indexOf('Trident/');
if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}

var edge = ua.indexOf('Edge/');
if (edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}

// other browser like Chrome,Mozila..etc
return false;

}

masterweily

Cu jQuery:

$.browser

vă oferă ceva de genul:

Object {chrome: true, version: "26.0.1410.63", webkit: true}

Comentarii

  • A fost șters din JQUERY –  > Por Jamil Hneini.