В Javascript, как мне определить, является ли мой текущий браузер Firefox на компьютере по сравнению со всем остальным?

if(firefox and is on a computer){
alert('using firefox on a computer')
}else{
alert("using something else!");
}

Как я могу это сделать?

12 ответов

Решение

То, что вы ищете, называется обнаружением браузера:

if ($.browser.mozilla) { ... 

Тем не менее, перехватывать браузер не рекомендуется, так как его легко подделать пользовательским агентом, то есть притворяться другим браузером!

Лучше всего использовать функцию обнаружения по-своему или через jQuery.support интерфейс: http://api.jquery.com/jQuery.support/

Вот статья о расширении его для вашего собственного использования: http://www.waytoocrowded.com/2009/03/14/jquery-supportminheight/

Редактировать:

Нашел также этот пост, который помогает: Когда IE8 не IE8, что такое $.browser.version?

Я делаю что-то вроде ниже;

function checkBrowser(){
    c = navigator.userAgent.search("Chrome");
    f = navigator.userAgent.search("Firefox");
    m8 = navigator.userAgent.search("MSIE 8.0");
    m9 = navigator.userAgent.search("MSIE 9.0");
    if (c > -1) {
        browser = "Chrome";
    } else if (f > -1) {
        browser = "Firefox";
    } else if (m9 > -1) {
        browser ="MSIE 9.0";
    } else if (m8 > -1) {
        browser ="MSIE 8.0";
    }
    return browser;
}

Как это: Проверьте на Firefox. Или какой-то другой браузер.

 window.onload = function() {
          //  alert(navigator.userAgent);
            if (navigator.userAgent.indexOf("Firefox") > 0) {
                alert("ff");
            }
        }
if (navigator.userAgent.indexOf("Firefox") != -1) {

 //some specific code for Mozilla

 }

Лучше определять нужные функции, а не браузер. Например, если вам нужно знать, поддерживается ли foo(), вы можете проверить это с помощью if(foo){}

navigator.sayswho= (function(){
  var N= navigator.appName, ua= navigator.userAgent, tem;
  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.join(' ');
 })();

как следует из названия, это то, о чем говорит браузер, но используйте обнаружение объекта, прежде чем просить его что-нибудь сделать...

Я использую его для регистрации ошибок пользователей и тестирования кода в нескольких браузерах, где я знаю строки userAgent.

Для быстрого и грязного решения просто сделайте следующее: удобнее использовать include () при поиске по ключевому слову "Firefox" в NavigatorID.userAgent свойство, чем indexOf().

const isFirefoxBrowser = navigator.userAgent.includes('Firefox');

ПРЕДУПРЕЖДЕНИЕ:

Идентификация браузера на основе обнаружения строки пользовательского агента ненадежна и не рекомендуется, так как строка пользовательского агента настраивается пользователем.

Узнайте больше о userAgent на MDN >>

РЕКОМЕНДУЕМОЕ РЕШЕНИЕ:

Используйте функцию обнаружения вместо обнаружения в браузере.

Обнаружение функций включает в себя определение того, поддерживает ли браузер определенный блок кода, и выполнение другого кода в зависимости от того, поддерживает ли он или нет, так что браузер всегда может предоставить опыт работы, а скорее сбой / ошибку в некоторых браузерах.

Подробнее о реализации функции обнаружения в MDN >>

typeof InstallTrigger !== 'undefined'

Это просто и хорошо работает после Quantum, но не уверен, будет ли это ориентировано на будущее: https://developer.mozilla.org/en-US/docs/Web/API/InstallTrigger

Вы можете сделать контроль с помощью JavaScript navigator.userAgent или же navigator объект в целом,

Но если вы хотите использовать что-то готовое, проверьте это:

http://www.quirksmode.org/js/detect.html

надеюсь, это поможет, Синан.

Как уже спрашивали в комментарии: зачем тебе это? Обнюхивание браузера - плохая привычка, и есть только несколько ситуаций, когда это необходимо.

Вместо этого используйте функцию обнаружения. Как описано Николасом Закасом, вам следует тестировать относительно "необычные" функции перед их использованием и полагаться только на эти тесты, так что вы отчасти отказоустойчивы. Например, сделать

if (window.XMLHttpRequest)
    var xhr = new XMLHttpRequest();

вместо

if ((brwsr.IE && brwsr.IE.version >= 7) || (brwsr.firefox) || (brwsr.opera))
    var xhr = new XMLHttpRequest();

И тоже не делай

if (window.XMLHttpRequest)
    // Hey, native XMLHttpRequest-support, so position: fixed is also supported

(вместо этого, проверьте, если position: fixed поддерживается)

Существует несколько необычных браузеров с такими именами, как Kazehakase и Midori, которые также могут или не могут поддерживать эти функции, поэтому ваши сценарии будут работать над ними при использовании функции обнаружения.

Но, пожалуйста, прочитайте упомянутую статью, так как она содержит очень хорошее и подробное объяснение этой техники. (Кстати, я думаю, что Профессиональный JavaScript для веб-разработчиков Zakas все еще слишком неизвестен.)

http://api.jquery.com/jQuery.browser/

if ($.browser.mozilla) { ...

Любые решения, упомянутые здесь, небезопасны, поскольку агент не всегда в первую очередь предоставляет правильное имя браузера. Если вы вызываете страницу с Chrome, у вас также есть сафари в агенте. Это означает, что если safari - это первое, что происходит с запросом if, тогда у вас есть safari, если у вас нет elseif, и только если тогда переопределение переопределяется в этом случае safari. Это решение не самое безопасное, но для получения первого всегда требуется самый маленький индекс. Опера наоборот, опера находится в самом конце агента, поэтому другие браузеры могут отличаться.

/**
 * Description of Browser
 *
 * @author      Samet Tarim
 * @link        http://www.tnado.com/
 */    
var _MBT_Browser = {
    client: {},
    __init: function () {

        console.log('Init Browser...');

        _MBT_Browser.client.agent = navigator.userAgent;
        _MBT_Browser.set();
    },
    set: function () {

        var browsers = ["Firefox", "MSIE", "Trident", "Safari", "Chrome", "OPR"]; // Set the browser we want to detect
        _MBT_Browser.get(browsers);
        if (_MBT_Browser.client.current) {
            document.documentElement.setAttribute('data-useragent', _MBT_Browser.client.current); // Ad HTML tag data-useragent="IE"
        }
    },
    get: function (browser) {

        var index = '',
            i = 0,
            max = 0,
            min = 1000000; // to get the min value, we set first to million, is a placeholder for the first loop

        for (; i < browser.length; i++) {

            index = _MBT_Browser.client.agent.indexOf(browser[i]); // get index

            // Special case, we need here the largest index
            if (browser[i] === "OPR/") {
                if (index > -1 && index > max) {
                    min = index;
                    _MBT_Browser.client.current = browser[i].toLowerCase();
                }
            } else {
            // We hold only the smallest index number and overwrite on smaller
                if (index > -1 && index < min) {
                    min = index;
                    _MBT_Browser.client.current = browser[i].toLowerCase();
                }
            }
        }
    }
};

Использование:

document.addEventListener('DOMContentLoaded', function () {
    _MBT_Browser.__init();
});

И использовать с CSS для стилизации в браузере:

[data-useragent="firefox"] {
    /* Attribute has this exact value */
}

Ты можешь использовать navigator.userAgent за это. Просто посмотрите, содержит ли он Mozilla

Используйте реальную библиотеку, такую ​​как jquery и т. Д., Тогда вам действительно не нужно беспокоиться об этом большую часть времени.

Другие вопросы по тегам