Soru JQuery $ .browser kullanımdan kaldırıldı mı?


Birisi, jQuery'nin $ .browser'ın kullanımdan kaldırıldığına inanmakta haklı olduğumu söyleyebilir mi?

Mevcut uygulamalarım çalışmaya devam edecek mi? Aksi takdirde, uygulanması kolay bir alternatif var mı.


76
2018-03-09 17:15


Menşei


api.jquery.com/jQuery.browser Kategori: kullanımdan kaldırıldı. - Evan Mulawski
Bu neden işaretlendi? Bazıları için önemsiz bir soru olabilir ama eğer bir alternatif bilmiyorsam, sormak için geçerli bir şey. - Mark_54
Ya da sadece eklenti ekle: github.com/gabceb/jquery-browser-plugin - user956584


Cevaplar:


itibaren Dökümantasyon:

$ .Browser özelliği jQuery 1.3'te kullanımdan kaldırılmıştır ve işlevselliği jQuery'nin gelecekteki sürümlerinde takım destekli bir eklentiye taşınabilir.

Yani, evet, kullanımdan kaldırılıyor, ancak mevcut uygulamalarınız çalışmaya devam edecek. İşlev kaldırılırsa, bir eklenti kullanılarak kolayca erişilebilir olacaktır.

Alternatif olup olmadığı konusunda ... Cevap "evet, muhtemelen" dir. Özellik algılama özelliğini kullanmak çok uzak $.support tarayıcı algılaması yerine: ihtiyacınız olan gerçek özelliği, onu sağlayan tarayıcıyı algılamaz. Tarayıcıdan tarayıcıya değişen en önemli özellikler bununla tespit edilir.


16 Şubat 2013 Güncellemesi: JQuery 1.9'da, bu özellik kaldırıldı (docs). Kullanmamak çok daha iyi. Eğer gerçekten, gerçekten şart işlevselliğini kullanın, jQuery Migrate Eklenti.


67
2018-03-09 17:18



İle sorun $.support , IE 7 kullanıyorum ve bu yüzden sayfamı düzeltmek için CSS tweaks eklemem gerekip gerekmediğini nasıl anlarım? - Rocket Hazmat
@Roket Şartlı yorumlar kesinlikle daha iyi olurdu. - lonesomeday
lonesomeday - Bu ek yorum için teşekkür ederiz. Hepimiz bilgimizi oluşturmaya ve zaman zaman yardıma ihtiyacımız var. - Mark_54
ve $.browser dan kaldırıldı jQuery 1.9 - diEcho
IE ve farklı IE sürümleri ile çok fazla quirks vardır. Evet IE 7, animasyonları destekliyor, fakat NO Kullanıcılarımın onu görmesini istemiyorum! Bu korkunç. Yani $ .browser bu durumda gerçekten çok kullanışlı. - Elger Mensonides


İkinci soru

Mevcut uygulamalarım çalışmaya devam edecek mi? Değilse, orada bir   alternatif uygulamak kolay.

Cevap Evetama küçük bir iş olmadan olmaz.

$ .browser jQuery'nin eski sürümlerinde yer alan resmi bir eklentidir, böylece herhangi bir eklenti gibi basitçe kopyalayabilir ve projenize dahil edebilir veya herhangi bir jQuery sürümünün sonuna ekleyebilirsiniz.

Bunu kullanmak istediğinizde sizin için kodu çıkardım.


// 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;
    };

})();

Birinin neden amortismana tabi bir eklentiye ihtiyacı olduğunu soruyorsanız, aşağıdaki cevabı hazırladım.

İlk ve en önemli olan cevap uyumluluk. JQuery eklenti tabanlı olduğundan, bazı geliştiriciler $ .browser'ı ve en son jQuery sürümlerini kullanmayı seçmişlerdir.

jQuery bir yayınladı geçiş eklentisigeliştiricilerin, eklentilerinin $ .browser gibi herhangi bir amortismana tabi bağımlılık kullanıp kullanmadığını saptamak için oluşturuldu.

Bu, geliştiricilerin eklentilerini kullanmasına yardımcı oldu. jQuery, $ .browser'ı tamamen düşürdü, böylece yukarıdaki düzeltmeler, geliştiricileriniz yukarıda belirtilenleri ekleyene veya birleştirene kadar muhtemelen tek çözümdür.

Hakkında:  jQuery.browser


92
2018-01-21 01:10



Bu bana jQuery 1.9.0 ile çalışmak için $ .browser kullanmaya devam eden bir 3. parti betiği almama yardımcı oldu. Teşekkürler! - twamley
Bu (ve diğer kullanım dışı özelliklerin) daha resmi bir sürümünü burada buldum: github.com/jquery/jquery-migrate - twamley
Eklenti geçişi, kullanıcıların mevcut komut dosyalarında varsa, kullanımdan kaldırılmış işlevlerin bir listesini görmelerini sağlayan iyi bir araçtır. Bir yama olması amaçlanmamıştır. - EminezArtus
Kabul. O zamandan beri 3. parti senaryosunun bir sonraki genini beklerken 1.8.3 ile kalmaya karar verdim. - twamley
Kesinlikle deha! - Kamil


Burada, özellik kullanılabilirliğine bağlı olarak bir tarayıcı tespit etmenin alternatif bir yolunu sunuyoruz.

Sadece IE'yi tespit etmek için şunu kullanabilirsiniz:

if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
    //You are using IE>=4 (unreliable for IE11)
}
else
{
    //You are using other browser
}

En popüler tarayıcıları tespit etmek için:

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
}

Bu yanıt güncellendi çünkü IE11 artık koşullu derlemeyi desteklemiyor ( /*@cc_on!@*/false hile).
Kontrol edebilirsin IE11 javascript koşullu derleme kaldırıldı mı? Bu konuyla ilgili daha fazla bilgi için.
Orada sundukları öneriyi kullandım.
Alternatif olarak, kullanabilirsiniz typeof document.body.style.msTransform == "string" veya document.body.style.msTransform !== window.undefined ya da 'msTransform' in document.body.style.


6
2017-09-12 16:29



Bunu paylaştığın için teşekkürler. Benim tarih seçici VS2013 yükseltme ve Nuget Paket yöneticisi JQuery ve Meyve suyu dowloading sonra çalışma değildi. Kodu yapıştırdı ve her şey tekrar çalıştı. - user1270384
Rica ederim. Javascript kodlarımın bazılarında kenardaki tüm tarayıcıları işlemek için bu kodu kullanıyorum. Bunun HERHANGİ bir tanesi çalışmıyorsa ve eğer bunu tespit ederseniz, lütfen en kısa zamanda bana bildirin. - Ismael Miguel
/ * @ cc_on! @ * / false IE edge için false döndürür - alex
@alex Hangi işletim sistemini ve hangi işletim sistemini kullanıyorsunuz? Bir sanal makinede kullanıyorsanız lütfen yazılımı ve sürümü belirtebilir misiniz? - Ismael Miguel
@IsmaelMiguel - F12 dev araçlarıyla test edildi, Document Mode = Edge (Varsayılan), i type: / * @ cc_on! @ * / False == konsolda true ve false değerini döndürür. IE'nin tam sürümü / yapısı: 11.0.9600.17207. OS = Windows 7. IE'de fiziksel makinede test etme, sanal değil - alex


Güncellenmiş! 3/24/2015 (saatin altında ilerleyin)

lonesomeday'ler Cevap kesinlikle doğru, sadece bu tidbit ekleyeceğini düşündüm. Vanilla JS'de tarayıcı almak için bir süre önce bir yöntem yapmıştım ve sonunda yerini değiştirdi jQuery.browser jQuery'nin sonraki sürümlerinde. Yeni jQuery lib'in herhangi bir bölümüne müdahale etmez, ancak gelenekselin aynı işlevselliğini sağlar. jQuery.browser nesnenin yanı sıra bazı diğer küçük özellikler.


Yeni Genişletilmiş Versiyon!

Daha yeni tarayıcı için daha kapsamlı. Ayrıca, mobil testlerde% 90 + doğruluk! Her mobil tarayıcıda test yapmadığım için% 100 demem, ancak yeni özellik ekliyor $.browser.mobile boolean / dizesi. Mobil değilse, yanlıştır, aksi takdirde mobil cihaz veya tarayıcı için bir Dize adı olacaktır (En İyi Tahminler: Android, RIM Tablet, iPod, vb ...).

Bir olası uyarı, tamamen eski olduğu için bazı eski (desteklenmeyen) tarayıcılarla çalışmayabilir. userAgent dize.

JS Minified

/* 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 */

jsFiddle "jQuery Eklentisi: Tarayıcı Al (Genişletilmiş Alt Sürüm)"

/**	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>


3
2017-10-08 13:25





"$ .Browser özelliği jQuery 1.3'te kullanımdan kaldırıldı ve işlevselliği jQuery'nin gelecekteki sürümlerinde takım destekli bir eklentiye taşınabilir."

itibaren http://api.jquery.com/jQuery.browser/


3
2018-03-09 17:16



@ Mark_54 Bir şey değil! - Gabriel Santos
$.browser v1.9 sürümünde kaldırıldı - hasMobi - Android Apps


Adresindeki resmi belgelerden http://api.jquery.com/jQuery.browser/:

Bu özellik jQuery 1.9'da kaldırıldı ve yalnızca jQuery.migrate eklentisiyle kullanılabilir.

Örneğin kullanabilirsiniz jquery-migrate-1.4.1.js Gelecekte kodunuzdan tamamen $ .browser kurtulmak için bir yol bulurken hala çalışıyor $ .browser kullanmak mevcut kod veya eklentileri tutmak.


0
2017-10-27 00:00