Хтось може сказати мені, чи правильно я вважаю, що $ .browser jQuery застарілий?
Чи будуть мої існуючі реалізації продовжувати працювати? Якщо ні, чи є проста у реалізації альтернатива.
Хтось може сказати мені, чи правильно я вважаю, що $ .browser jQuery застарілий?
Чи будуть мої існуючі реалізації продовжувати працювати? Якщо ні, чи є проста у реалізації альтернатива.
Відповіді:
З документації :
Властивість $ .browser застаріло в jQuery 1.3, і його функціональні можливості можуть бути переміщені до плагіна, що підтримується командою, у наступному випуску jQuery.
Так, так, це застаріло, але ваші існуючі реалізації продовжуватимуть працювати. Якщо функціональність буде видалена, вона, швидше за все, буде легко доступна за допомогою плагіна.
Щодо того, чи існує альтернатива ... Відповідь "так, мабуть". Набагато краще виявляти функції, $.support
а не виявляти браузером: виявляти потрібну вам функцію, а не браузер, який її надає. Найважливіші функції, які відрізняються від браузера до браузера, виявляються за допомогою цього.
Оновлення 16 лютого 2013 р .: У jQuery 1.9 цю функцію було видалено ( docs ). Набагато краще не використовувати його. Якщо ви дійсно, дійсно повинні використовувати його функціонал, ви можете відновити його за допомогою плагіна jQuery Migrate .
$.support
тому, як я можу визначити, чи використовую IE 7, і тому мені потрібно додати налаштування CSS, щоб виправити мою сторінку?
$.browser
був вилучений зjQuery 1.9
Чи будуть мої існуючі реалізації продовжувати працювати? Якщо ні, чи є проста у реалізації альтернатива.
Відповідь - так , але не без невеликої роботи.
$ .browser - це офіційний плагін, який був включений у старіші версії jQuery, тому, як і будь-який інший плагін, ви можете просто скопіювати його та включити у свій проект, або просто додати його до кінця будь-якого випуску jQuery.
Я витягнув для вас код, якщо ви хочете ним скористатися.
// Limit scope pollution from any deprecated API
(function() {
var matched, browser;
// Use of jQuery.browser is frowned upon.
// More details: http://api.jquery.com/jQuery.browser
// jQuery.uaMatch maintained for back-compat
jQuery.uaMatch = function( ua ) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
/(msie) ([\w.]+)/.exec( ua ) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
matched = jQuery.uaMatch( navigator.userAgent );
browser = {};
if ( matched.browser ) {
browser[ matched.browser ] = true;
browser.version = matched.version;
}
// Chrome is Webkit, but Webkit is also Safari.
if ( browser.chrome ) {
browser.webkit = true;
} else if ( browser.webkit ) {
browser.safari = true;
}
jQuery.browser = browser;
jQuery.sub = function() {
function jQuerySub( selector, context ) {
return new jQuerySub.fn.init( selector, context );
}
jQuery.extend( true, jQuerySub, this );
jQuerySub.superclass = this;
jQuerySub.fn = jQuerySub.prototype = this();
jQuerySub.fn.constructor = jQuerySub;
jQuerySub.sub = this.sub;
jQuerySub.fn.init = function init( selector, context ) {
if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
context = jQuerySub( context );
}
return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
};
jQuerySub.fn.init.prototype = jQuerySub.fn;
var rootjQuerySub = jQuerySub(document);
return jQuerySub;
};
})();
Якщо ви запитуєте, чому комусь потрібен амортизований плагін, я підготував наступну відповідь.
Перш за все відповідь - сумісність. Оскільки jQuery базується на плагінах, деякі розробники вирішили використовувати $ .browser і з останніми випусками jQuery, що не включає $ .browser, всі ті плагіни, які стали марними.
jQuery випустив плагін міграції , який був створений для розробників, щоб визначити, чи використовували їх плагіни амортизовані залежності, такі як $ .browser.
Хоча це допомогло розробникам виправити свої плагіни. jQuery повністю знизив $ .browser, тому вищевказане виправлення є, мабуть, єдиним рішенням, доки розробники не виправлять або не включать вищезазначене.
Про: jQuery.browser
placeholder
атрибут, через IE10 є помилки, з якими нам доводиться мати справу та вимагати $.browser
для цього ...
Тут я представляю альтернативний спосіб виявлення браузера на основі доступності функцій.
Щоб виявити лише IE, ви можете використовувати це:
if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
//You are using IE>=4 (unreliable for IE11)
}
else
{
//You are using other browser
}
Щоб виявити найпопулярніші браузери:
if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
//You are using IE >= 4 (unreliable for IE11!!!)
}
else if(window.chrome)
{
//You are using Chrome or Chromium
}
else if(window.opera)
{
//You are using Opera >= 9.2
}
else if('MozBoxSizing' in document.body.style)
{
//You are using Firefox or Firefox based >= 3.2
}
else if({}.toString.call(window.HTMLElement).indexOf('Constructor')+1)
{
//You are using Safari >= 3.1
}
else
{
//Unknown
}
Ця відповідь була оновлена, оскільки IE11 більше не підтримує умовне компілювання ( /*@cc_on!@*/false
фокус).
Ви можете перевірити, чи видалив IE11 умовну компіляцію javascript? для отримання додаткової інформації щодо цієї теми.
Я використав пропозицію, яку вони там подали.
Крім того , ви можете використовувати typeof document.body.style.msTransform == "string"
або document.body.style.msTransform !== window.undefined
навіть 'msTransform' in document.body.style
.
Оновлено! 24.03.2015 (прокрутка нижче години)
lonesomeday «s відповідь абсолютно правильно, я просто думав , що я хотів би додати цю пікантну. Я давно створив метод для отримання браузера у Vanilla JS і врешті-решт вигнув його для заміни jQuery.browser
в пізніших версіях jQuery. Він не заважає жодній частині нової бібліотеки jQuery, але забезпечує однакову функціональність традиційного jQuery.browser
об'єкта, а також деякі інші невеликі функції.
Нова розширена версія!
Набагато ретельніше для нових браузерів. Крім того, 90 +% точність при мобільному тестуванні! Не скажу на 100%, оскільки я не тестував на кожному мобільному браузері, але нова функція додає $.browser.mobile
логічний / рядок. Неправда, якщо не мобільна, інакше це буде ім'я рядка для мобільного пристрою або браузера (Найкраще вгадування, наприклад: Android, планшет RIM, iPod тощо ...).
Одне з можливих застережень може не працювати з деякими старими (непідтримуваними) браузерами, оскільки воно повністю залежить від userAgent
рядка.
/* quick & easy cut & paste */
;;(function($){if(!$.browser&&1.9<=parseFloat($.fn.jquery)){var a={browser:void 0,version:void 0,mobile:!1};navigator&&navigator.userAgent&&(a.ua=navigator.userAgent,a.webkit=/WebKit/i.test(a.ua),a.browserArray="MSIE Chrome Opera Kindle Silk BlackBerry PlayBook Android Safari Mozilla Nokia".split(" "),/Sony[^ ]*/i.test(a.ua)?a.mobile="Sony":/RIM Tablet/i.test(a.ua)?a.mobile="RIM Tablet":/BlackBerry/i.test(a.ua)?a.mobile="BlackBerry":/iPhone/i.test(a.ua)?a.mobile="iPhone":/iPad/i.test(a.ua)?a.mobile="iPad":/iPod/i.test(a.ua)?a.mobile="iPod":/Opera Mini/i.test(a.ua)?a.mobile="Opera Mini":/IEMobile/i.test(a.ua)?a.mobile="IEMobile":/BB[0-9]{1,}; Touch/i.test(a.ua)?a.mobile="BlackBerry":/Nokia/i.test(a.ua)?a.mobile="Nokia":/Android/i.test(a.ua)&&(a.mobile="Android"),/MSIE|Trident/i.test(a.ua)?(a.browser="MSIE",a.version=/MSIE/i.test(navigator.userAgent)&&0<parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,""))?parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,"")):"Edge",/Trident/i.test(a.ua)&&/rv:([0-9]{1,}[\.0-9]{0,})/.test(a.ua)&&(a.version=parseFloat(a.ua.match(/rv:([0-9]{1,}[\.0-9]{0,})/)[1].replace(/[^0-9\.]/g,"")))):/Chrome/.test(a.ua)?(a.browser="Chrome",a.version=parseFloat(a.ua.split("Chrome/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Opera/.test(a.ua)?(a.browser="Opera",a.version=parseFloat(a.ua.split("Version/")[1].replace(/[^0-9\.]/g,""))):/Kindle|Silk|KFTT|KFOT|KFJWA|KFJWI|KFSOWI|KFTHWA|KFTHWI|KFAPWA|KFAPWI/i.test(a.ua)?(a.mobile="Kindle",/Silk/i.test(a.ua)?(a.browser="Silk",a.version=parseFloat(a.ua.split("Silk/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Kindle/i.test(a.ua)&&/Version/i.test(a.ua)&&(a.browser="Kindle",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,"")))):/BlackBerry/.test(a.ua)?(a.browser="BlackBerry",a.version=parseFloat(a.ua.split("/")[1].replace(/[^0-9\.]/g,""))):/PlayBook/.test(a.ua)?(a.browser="PlayBook",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/BB[0-9]{1,}; Touch/.test(a.ua)?(a.browser="Blackberry",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Android/.test(a.ua)?(a.browser="Android",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Safari/.test(a.ua)?(a.browser="Safari",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Firefox/.test(a.ua)?(a.browser="Mozilla",a.version=parseFloat(a.ua.split("Firefox/")[1].replace(/[^0-9\.]/g,""))):/Nokia/.test(a.ua)&&(a.browser="Nokia",a.version=parseFloat(a.ua.split("Browser")[1].replace(/[^0-9\.]/g,""))));if(a.browser)for(var b in a.browserArray)a[a.browserArray[b].toLowerCase()]=a.browser==a.browserArray[b];$.extend(!0,$.browser={},a)}})(jQuery);
/* quick & easy cut & paste */
/** jQuery.browser
* @author J.D. McKinstry (2014)
* @description Made to replicate older jQuery.browser command in jQuery versions 1.9+
* @see http://jsfiddle.net/SpYk3/wsqfbe4s/
*
* @extends jQuery
* @namespace jQuery.browser
* @example jQuery.browser.browser == 'browserNameInLowerCase'
* @example jQuery.browser.version
* @example jQuery.browser.mobile @returns BOOLEAN
* @example jQuery.browser['browserNameInLowerCase']
* @example jQuery.browser.chrome @returns BOOLEAN
* @example jQuery.browser.safari @returns BOOLEAN
* @example jQuery.browser.opera @returns BOOLEAN
* @example jQuery.browser.msie @returns BOOLEAN
* @example jQuery.browser.mozilla @returns BOOLEAN
* @example jQuery.browser.webkit @returns BOOLEAN
* @example jQuery.browser.ua @returns navigator.userAgent String
*/
;;(function($){if(!$.browser&&1.9<=parseFloat($.fn.jquery)){var a={browser:void 0,version:void 0,mobile:!1};navigator&&navigator.userAgent&&(a.ua=navigator.userAgent,a.webkit=/WebKit/i.test(a.ua),a.browserArray="MSIE Chrome Opera Kindle Silk BlackBerry PlayBook Android Safari Mozilla Nokia".split(" "),/Sony[^ ]*/i.test(a.ua)?a.mobile="Sony":/RIM Tablet/i.test(a.ua)?a.mobile="RIM Tablet":/BlackBerry/i.test(a.ua)?a.mobile="BlackBerry":/iPhone/i.test(a.ua)?a.mobile="iPhone":/iPad/i.test(a.ua)?a.mobile="iPad":/iPod/i.test(a.ua)?a.mobile="iPod":/Opera Mini/i.test(a.ua)?a.mobile="Opera Mini":/IEMobile/i.test(a.ua)?a.mobile="IEMobile":/BB[0-9]{1,}; Touch/i.test(a.ua)?a.mobile="BlackBerry":/Nokia/i.test(a.ua)?a.mobile="Nokia":/Android/i.test(a.ua)&&(a.mobile="Android"),/MSIE|Trident/i.test(a.ua)?(a.browser="MSIE",a.version=/MSIE/i.test(navigator.userAgent)&&0<parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,""))?parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,"")):"Edge",/Trident/i.test(a.ua)&&/rv:([0-9]{1,}[\.0-9]{0,})/.test(a.ua)&&(a.version=parseFloat(a.ua.match(/rv:([0-9]{1,}[\.0-9]{0,})/)[1].replace(/[^0-9\.]/g,"")))):/Chrome/.test(a.ua)?(a.browser="Chrome",a.version=parseFloat(a.ua.split("Chrome/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Opera/.test(a.ua)?(a.browser="Opera",a.version=parseFloat(a.ua.split("Version/")[1].replace(/[^0-9\.]/g,""))):/Kindle|Silk|KFTT|KFOT|KFJWA|KFJWI|KFSOWI|KFTHWA|KFTHWI|KFAPWA|KFAPWI/i.test(a.ua)?(a.mobile="Kindle",/Silk/i.test(a.ua)?(a.browser="Silk",a.version=parseFloat(a.ua.split("Silk/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Kindle/i.test(a.ua)&&/Version/i.test(a.ua)&&(a.browser="Kindle",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,"")))):/BlackBerry/.test(a.ua)?(a.browser="BlackBerry",a.version=parseFloat(a.ua.split("/")[1].replace(/[^0-9\.]/g,""))):/PlayBook/.test(a.ua)?(a.browser="PlayBook",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/BB[0-9]{1,}; Touch/.test(a.ua)?(a.browser="Blackberry",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Android/.test(a.ua)?(a.browser="Android",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Safari/.test(a.ua)?(a.browser="Safari",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Firefox/.test(a.ua)?(a.browser="Mozilla",a.version=parseFloat(a.ua.split("Firefox/")[1].replace(/[^0-9\.]/g,""))):/Nokia/.test(a.ua)&&(a.browser="Nokia",a.version=parseFloat(a.ua.split("Browser")[1].replace(/[^0-9\.]/g,""))));if(a.browser)for(var b in a.browserArray)a[a.browserArray[b].toLowerCase()]=a.browser==a.browserArray[b];$.extend(!0,$.browser={},a)}})(jQuery);
/* - - - - - - - - - - - - - - - - - - - */
var b = $.browser;
console.log($.browser); // see console, working example of jQuery Plugin
console.log($.browser.chrome);
for (var x in b) {
if (x != 'init')
$('<tr />').append(
$('<th />', { text: x }),
$('<td />', { text: b[x] })
).appendTo($('table'));
}
table { border-collapse: collapse; }
th, td { border: 1px solid; padding: .25em .5em; vertical-align: top; }
th { text-align: right; }
textarea { height: 500px; width: 100%; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table></table>
"Властивість $ .browser застаріло в jQuery 1.3, і його функціональність може бути переміщена до плагіна, що підтримується командою, у майбутньому випуску jQuery."
$.browser
видалено в v1.9
З офіційної документації за адресою http://api.jquery.com/jQuery.browser/ :
Це властивість було вилучено в jQuery 1.9 і доступне лише через плагін jQuery.migrate.
Ви можете використовувати, наприклад, jquery-migrate-1.4.1.js
щоб ваш існуючий код або плагіни, які використовують $ .browser, все ще працювали, поки ви знайдете спосіб повністю позбутися $ .browser від свого коду в майбутньому.