Кажется, что jQuery.browser может довольно легко идентифицировать webkit начиная с версии 1.4. Но как я могу использовать его, чтобы отличить Chrome от Safari (и наоборот)?
Отличить Chrome от Safari с помощью jQuery.browser
Ответы (6)
Поскольку Sarfraz не исправил свой ответ (спасибо Sarfraz за то, что указали мне правильное направление), я опубликую здесь работающий код.
var userAgent = navigator.userAgent.toLowerCase();
$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
// Is this a version of Chrome?
if($.browser.chrome){
userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
$.browser.version = userAgent;
// If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
$.browser.safari = false;
}
// Is this a version of Safari?
if($.browser.safari){
userAgent = userAgent.substring(userAgent.indexOf('version/') +8);
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
$.browser.version = userAgent;
}
person
kingjeffrey
schedule
29.07.2010
Для сафари $.browser.version дает вам версию webkit, а не версию сафари. Вместо этого попробуйте userAgent.indexOf('Version/') + 8.
- person David; 25.08.2011
Кроме того, вы можете подстроку до символа пробела вместо точки в строках, которые говорят
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
, чтобы получить полные номера версий, а не только первую часть номера версии (основной номер).
- person mkmurray; 29.02.2012
@David, вам нужно будет использовать строчные буквы
v
в строке 'Version/'
, так как ранее в коде строка пользовательского агента была строчной.
- person mkmurray; 29.02.2012
Без jQuery
isChrome = function() {
return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
}
isSafari = function() {
return /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
}
С jQuery
(Следующее не будет работать с jQuery 1.9 и выше, поскольку jQuery.browser
было удалено из jQuery. См. http://api.jquery.com/jQuery.browser/)
$.browser.chrome = $.browser.webkit && !!window.chrome;
$.browser.safari = $.browser.webkit && !window.chrome;
person
Vikrant Chaudhary
schedule
08.08.2011
первое решение очень элегантно.
- person NullVoxPopuli; 29.02.2012
Почему !! для хрома что это значит?
- person Carlos; 31.08.2012
Очень жаль, что $.browser удалили. Но как мы это обнаружим с 1.10? Я ничего не видел в документах API.
- person AGamePlayer; 04.12.2013
Вы можете сделать так:
// Is this a version of Chrome?
if($.browser.chrome){
userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
version = userAgent;
// If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
$.browser.safari = false;
}
// Is this a version of Safari?
if($.browser.safari){
userAgent = userAgent.substring(userAgent.indexOf('safari/') +7);
userAgent = userAgent.substring(0,userAgent.indexOf('.'));
version = userAgent;
}
http://api.jquery.com/jQuery.browser/
person
Sarfraz
schedule
21.07.2010
гм -- $.browser.chrome не определен. и $.browser.safari верно как для хрома, так и для сафари
- person Scott Evernden; 22.07.2010
@sAc, вы были близки, это должно появиться перед предоставленным вами кодом:
var userAgent = navigator.userAgent.toLowerCase(); $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); var version = 0;
- person kingjeffrey; 22.07.2010
@sAc, кроме того, переменная
version
не нужна и ее следует заменить на $.browser.version
.
- person kingjeffrey; 23.07.2010
@sAc, я хотел бы принять ваш ответ, так как он поставил меня на правильный путь, но я не могу этого сделать, пока он содержит неработоспособный код. Пожалуйста, отредактируйте свой ответ, чтобы исправить ошибки, упомянутые выше.
- person kingjeffrey; 23.07.2010
@kingjeffrey: я разместил код из документов jquery, ссылка на который размещена в моем ответе, он не был написан мной. И любые исправления уже упомянуты в этих комментариях :)
- person Sarfraz; 23.07.2010
@sAc, вы вставили часть кода, которая потеряла важный контекст. Хотя это указало мне правильное направление, эта потеря контекста калечит предоставленный код. Я бы сам отредактировал, но моя репутация не позволяет.
- person kingjeffrey; 24.07.2010
Также для пользователей, не использующих JQuery:
navigator.userAgent.indexOf('WebKit') + 1 ?
((navigator.vendor || '').indexOf('Apple') + 1 ? /* Safari */ : /* Chrome */)
: /* not Webkit */
person
Hugo Stieglitz
schedule
24.04.2012
Это помогло мне. Если вы не привыкли к такого рода условным операторам, вам будет сложно это прочитать, но вы довольно хорошо все изложили. Благодаря тонну.
- person Scott M; 24.07.2012
Вы также можете попробовать использовать этот подход, он работает для меня.
isSafari: function ()
{
var isSafari = (navigator.userAgent.indexOf('Safari') != -1
&& navigator.userAgent.indexOf('Chrome') == -1)
console.log('IsSafari : ' + isSafari);
return isSafari;
},
person
Sivalingaamorthy
schedule
12.02.2015
window.chrome?$.browser.chrome=!0:($.browser.webkit&&($.browser.safari=!0),$.browser.chrome=!1);
Этот патч добавляет $.browser.chrome, а также исключает обнаружение Google Chrome из $.browser.safari.
person
J_z
schedule
26.03.2012