Что такое НАДЕЖНЫЙ способ определить браузер клиента и номер его версии?

Что такоенадежный способ обнаружить кого-тобраузер и его номер версии? Из того, что явидел, такие вещи, какnavigator Объекты в JavaScript просто не работают в этом направлении, как и многие из этих по-настоящему взломанных решений.м, сталкиваюсь. Есть один или два в настоящее время функциональных фрагмента кода JavaScript, которые ямы сталкивались с этимскажу, использует ли кто-нибудь Firefox, Chrome и т. д., но они неописать номер версии каждого браузера. Как это можно найти и как это можно сделать надежно? (Внешние интерфейсы - это пара приложений Flex.)

РЕДАКТИРОВАТЬ

Этот вопрос был связан с очень похожим, с предложением, чтобы я мог просто использовать ответ там. Я могу'т; это неработать по неизвестным причинам. В моем предыдущем редактировании, то, что ниже этого, первый пример, который я публикую, взят из этого другого вопроса. Пожалуйста, удалите эту ссылку. Благодарю.

РЕДАКТИРОВАТЬ

Я знаю, что этот вопрос задавали миллион раз, но ям, включая принятые в Stack Overflow, либо просто не работают, либо работают недостаточно хорошо, чтобы их можно было использовать. Тот'почему ям подчеркивая словонадежный», Одна вещь, котораямешает то, что во многих фрагментах кода выя увижу "Netscape» подойди вместоInternet Explorer ", так далее.

Например, "Internet Explorer 11 ","Firefox 26 "и т.д. Или, по крайней мере, что-то вроде этого.

Вот несколько примеров фрагментов кода, которые нене получается слишком хорошо

Популярно, но победилоне запускаю, когда пытаюсь

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+(\.\d+)?)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    M= M[2]? [M[1], M[2]]:[navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
    return M.join(' ');
})();

Отлично работает с Firefox, но говорит, что IE - это Netscape и дает очень сложные результаты при описании версии:

function get_browser(){
    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[0];
}
function get_browser_version(){
    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[1];
}

alert(get_browser())
alert(get_browser_version())

Это почти то, что мне нужно; до тех пор, пока это нене требуется самой новой версии чего-либо, тогда мне просто нужны номера версий:

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 = /*@cc_on!@*/false || !!document.documentMode; // At least IE6

Что-то, что возвращает строку вроде:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

для IE11 или вызывает Firefox и IE "Netscape» ISN»не совсем то, что яищуnavigator У объекта в JavaScript много проблем с такими вещами.

Ответы на вопрос(1)

Ваш ответ на вопрос