Kann mir jemand sagen, ob ich zu Recht glaube, dass der $ .browser von jQuery veraltet ist / war?
Funktionieren meine vorhandenen Implementierungen weiterhin? Wenn nicht, gibt es eine einfach zu implementierende Alternative.
Kann mir jemand sagen, ob ich zu Recht glaube, dass der $ .browser von jQuery veraltet ist / war?
Funktionieren meine vorhandenen Implementierungen weiterhin? Wenn nicht, gibt es eine einfach zu implementierende Alternative.
Antworten:
Aus der Dokumentation :
Die $ .browser-Eigenschaft ist in jQuery 1.3 veraltet, und ihre Funktionalität kann in einer zukünftigen Version von jQuery auf ein vom Team unterstütztes Plugin verschoben werden.
Ja, es ist veraltet, aber Ihre vorhandenen Implementierungen funktionieren weiterhin. Wenn die Funktionalität entfernt wird, ist sie wahrscheinlich über ein Plugin leicht zugänglich.
Ob es eine Alternative gibt ... Die Antwort lautet "Ja, wahrscheinlich". Es ist weitaus besser, die Funktionserkennung mithilfe der $.support
Browsererkennung durchzuführen: Erkennen Sie die tatsächlich benötigte Funktion, nicht den Browser, der sie bereitstellt. Damit werden die wichtigsten Funktionen erkannt, die von Browser zu Browser unterschiedlich sind.
Update 16. Februar 2013: In jQuery 1.9 wurde diese Funktion entfernt ( docs ). Es ist weitaus besser, es nicht zu benutzen. Wenn Sie die Funktionalität wirklich, wirklich nutzen müssen , können Sie sie mit dem jQuery Migrate- Plugin wiederherstellen .
$.support
ist, wie erkenne ich, ob ich IE 7 verwende und daher CSS-Optimierungen hinzufügen muss, um meine Seite zu reparieren?
$.browser
wurde entfernt vonjQuery 1.9
Funktionieren meine vorhandenen Implementierungen weiterhin? Wenn nicht, gibt es eine einfach zu implementierende Alternative.
Die Antwort lautet ja , aber nicht ohne ein wenig Arbeit.
$ .browser ist ein offizielles Plugin, das in älteren Versionen von jQuery enthalten war. Wie bei jedem Plugin können Sie es einfach kopieren und in Ihr Projekt integrieren oder einfach am Ende jeder jQuery-Version hinzufügen.
Ich habe den Code für Sie extrahiert, falls Sie ihn verwenden möchten.
// 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;
};
})();
Wenn Sie fragen, warum jemand ein abgeschriebenes Plugin benötigt, habe ich die folgende Antwort vorbereitet.
In erster Linie lautet die Antwort Kompatibilität. Da jQuery Plugin-basiert ist, haben sich einige Entwickler für die Verwendung von $ .browser entschieden. Mit den neuesten Versionen von jQuery, die $ .browser nicht enthalten, wurden alle diese Plugins unbrauchbar gemacht.
jQuery hat ein Migrations-Plugin veröffentlicht , das für Entwickler erstellt wurde, um festzustellen, ob ihre Plugins veraltete Abhängigkeiten wie $ .browser verwendet haben.
Obwohl dies Entwicklern geholfen hat, ihre Plugins zu patchen. jQuery hat $ .browser vollständig gelöscht, sodass das obige Update wahrscheinlich die einzige Lösung ist, bis Ihre Entwickler das oben genannte Patches oder Integrationsprogramm verwenden.
Info: jQuery.browser
placeholder
Attribut bis zum IE10, mit denen wir uns befassen müssen und die wir dafür benötigen $.browser
...
Hier präsentiere ich eine alternative Möglichkeit, einen Browser basierend auf der Verfügbarkeit von Funktionen zu erkennen.
Um nur IE zu erkennen, können Sie Folgendes verwenden:
if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
//You are using IE>=4 (unreliable for IE11)
}
else
{
//You are using other browser
}
So erkennen Sie die beliebtesten 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
}
Diese Antwort wurde aktualisiert, da IE11 die bedingte Kompilierung (der /*@cc_on!@*/false
Trick) nicht mehr unterstützt .
Sie können überprüfen, ob IE11 die bedingte Javascript-Kompilierung entfernt hat. Weitere Informationen zu diesem Thema.
Ich habe den dort vorgelegten Vorschlag verwendet.
Alternativ können Sie typeof document.body.style.msTransform == "string"
oder document.body.style.msTransform !== window.undefined
oder sogar verwenden 'msTransform' in document.body.style
.
Aktualisiert! 24.03.2015 (Bildlauf unter Stunde)
Die Antwort von lonesomeday ist absolut richtig. Ich dachte nur, ich würde diesen Leckerbissen hinzufügen. Ich hatte vor einiger Zeit eine Methode entwickelt, um einen Browser in Vanilla JS zu erhalten, und sie schließlich gebogen, um sie jQuery.browser
in späteren Versionen von jQuery zu ersetzen . Es stört keinen Teil der neuen jQuery-Bibliothek, bietet jedoch die gleiche Funktionalität wie das herkömmliche jQuery.browser
Objekt sowie einige andere kleine Funktionen.
Neue erweiterte Version!
Ist für neuere Browser viel gründlicher. Auch 90 +% Genauigkeit beim mobilen Testen! Ich werde nicht 100% sagen, da ich nicht in jedem mobilen Browser getestet habe, aber die neue Funktion fügt $.browser.mobile
Boolean / String hinzu. Es ist falsch, wenn es nicht mobil ist, andernfalls ist es ein String-Name für das mobile Gerät oder den Browser (beste Vermutungen wie: Android, RIM Tablet, iPod usw.).
Eine mögliche Einschränkung ist, dass einige ältere (nicht unterstützte) Browser möglicherweise nicht funktionieren, da sie vollständig von userAgent
Zeichenfolgen abhängig sind .
/* 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>
"Die $ .browser-Eigenschaft ist in jQuery 1.3 veraltet und ihre Funktionalität wird möglicherweise in einer zukünftigen Version von jQuery auf ein vom Team unterstütztes Plugin verschoben."
$.browser
wird in v1.9
Aus der offiziellen Dokumentation unter http://api.jquery.com/jQuery.browser/ :
Diese Eigenschaft wurde in jQuery 1.9 entfernt und ist nur über das Plugin jQuery.migrate verfügbar.
Sie können beispielsweise jquery-migrate-1.4.1.js
Ihren vorhandenen Code oder Plugins, die $ .browser verwenden, weiterhin verwenden, während Sie einen Weg finden, $ .browser in Zukunft vollständig aus Ihrem Code zu entfernen.