Такое jQuery $.браузер устарел?
может кто-нибудь сказать мне, если я прав, полагая, что jQuery $.браузер является / был устаревшим?
будут ли мои существующие реализации продолжать работать? Если нет, есть ли простая в реализации альтернатива.
6 ответов:
С документация:
долларов.собственность браузер является устаревшим в jQuery 1.3, а его функциональность может быть перемещен в команде-поддерживает плагин в будущей версии библиотеки jQuery.
Итак, да, он устарел, но ваши существующие реализации будут продолжать работать. Если функциональность будет удалена, она, вероятно, будет легко доступна с помощью плагина.
есть ли альтернатива... Ответ "да, наверное." Это гораздо, гораздо лучше, чтобы сделать функцию обнаружения с помощью
$.support
вместо обнаружения браузера: определите фактическую функцию, которая вам нужна, а не браузер, который ее предоставляет. При этом обнаруживаются наиболее важные функции, которые варьируются от браузера к браузеру.
Обновление 16 Февраля 2013: в jQuery 1.9 эта функция была удалена ( docs). Гораздо лучше не использовать его. Если вы действительно, действительно должны использовать его функциональность, вы можете восстановить его с jQuery Migrate плагин.
Второй Вопрос
будут ли мои существующие реализации продолжать работать? Если нет, то есть ли легко реализовать альтернативу.
ответ да, но не без труда.
$.браузер-это официальный плагин, который был включен в более старые версии 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 основан на плагинах, некоторые разработчики решили использовать $.браузер и с последними выпусками jQuery, который не включает $.браузер все те плагины, где отображается бесполезный.
jQuery и все-таки выпустит миграция плагин, который был создан для разработчиков, чтобы определить, использовал ли их плагин какие-либо амортизированные зависимости, такие как $.браузер.
хотя это помогло разработчикам исправить их плагин. jQuery упал $.браузер полностью, поэтому вышеуказанное исправление, вероятно, является единственным решением, пока ваши разработчики не исправят или не включат вышеуказанное.
здесь я представляю альтернативный способ обнаружения браузера, основанный на доступности функций.
чтобы обнаружить только 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
.
Обновлено! 3/24/2015 (прокрутите ниже hr)
lonesomeday ' s ответ абсолютно правильно, я просто подумал, что добавлю этот лакомый кусочек. Я сделал метод некоторое время назад для получения браузера в Vanilla JS и в конечном итоге изогнул его, чтобы заменить
jQuery.browser
в более поздних версиях jQuery. Это не мешает какой-либо части нового jQuery lib, но обеспечивает ту же функциональность традиционного
"долларов.собственность браузер является устаревшим в jQuery 1.3, а его функциональность может быть перемещен в команде-поддерживает плагин в будущей версии библиотеки jQuery."
из официальной документации по адресу http://api.jquery.com/jQuery.browser/:
это свойство было удалено в jQuery 1.9 и доступно только через jQuery.перенести плагин.
вы можете использовать, например,
jquery-migrate-1.4.1.js
сохранить ваш существующий код или плагины, которые используют $.браузер все еще работает, пока вы находите способ полностью избавиться от $.браузер из вашего кода в будущем.