Pertanyaan Apakah jQuery $ .browser Tidak Diberikan?


Dapatkah seseorang memberi tahu saya jika saya benar dalam mempercayai bahwa $ browser jQuery adalah / telah ditinggalkan?

Apakah implementasi saya yang ada akan terus berfungsi? Jika tidak, apakah ada alternatif yang mudah diterapkan.


76
2018-03-09 17:15


asal


Jawaban:


Dari dokumentasi:

Properti $ .browser tidak lagi digunakan di jQuery 1.3, dan fungsinya dapat dipindahkan ke plugin yang didukung tim dalam rilis jQuery mendatang.

Jadi, ya, itu sudah ditinggalkan, tetapi implementasi Anda yang sudah ada akan terus berfungsi. Jika fungsionalitas dihapus, kemungkinan akan mudah diakses menggunakan plugin.

Seperti apakah ada alternatif ... Jawabannya adalah "ya, mungkin". Ini jauh, jauh lebih baik untuk melakukan deteksi fitur menggunakan $.support daripada deteksi browser: mendeteksi fitur aktual yang Anda butuhkan, bukan browser yang menyediakannya. Fitur terpenting yang bervariasi dari browser ke browser terdeteksi dengan itu.


Perbarui 16 Februari 2013: Di jQuery 1.9, fitur ini dihapus (dokumen). Jauh lebih baik untuk tidak menggunakannya. Jika Anda sungguh, sungguh harus menggunakan fungsinya, Anda dapat mengembalikannya dengan jQuery Migrate plugin.


67
2018-03-09 17:18



Pertanyaan kedua

Apakah implementasi saya yang ada akan terus berfungsi? Jika tidak, apakah ada   mudah menerapkan alternatif.

Jawabannya adalah iya nih, tetapi bukan tanpa kerja sedikit.

$ .browser adalah plugin resmi yang disertakan dalam versi jQuery yang lebih lama, jadi seperti plugin apa pun, Anda dapat menyalinnya dan memasukkannya ke dalam proyek Anda atau Anda dapat menambahkannya ke akhir rilis jQuery apa pun.

Saya telah mengekstrak kode untuk Anda memetikan Anda ingin menggunakannya.


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

})();

Jika Anda bertanya mengapa seseorang membutuhkan plugin yang terdepresiasi, saya telah menyiapkan jawaban berikut.

Pertama dan terpenting jawabannya adalah kompatibilitas. Karena jQuery berbasis plugin, beberapa pengembang memilih untuk menggunakan $ .browser dan dengan rilis jQuery terbaru yang tidak menyertakan $ .browser semua plugin tersebut jika tidak berguna.

jQuery tidak merilis plugin migrasi, yang dibuat untuk pengembang untuk mendeteksi apakah plugin mereka menggunakan dependensi yang terdepresiasi seperti $ .browser.

Meskipun ini membantu pengembang menambal plugin mereka. jQuery menjatuhkan $ .browser sepenuhnya sehingga perbaikan di atas mungkin adalah satu-satunya solusi sampai pengembang Anda menambal atau menggabungkan yang di atas.

Tentang:  jQuery.browser


92
2018-01-21 01:10



Di sini saya menyajikan cara alternatif untuk mendeteksi browser, berdasarkan ketersediaan fitur.

Untuk hanya mendeteksi IE, Anda dapat menggunakan ini:

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

Untuk mendeteksi browser paling populer:

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
}

Jawaban ini telah diperbarui karena IE11 tidak lagi mendukung kompilasi bersyarat (the /*@cc_on!@*/false menipu).
Anda bisa memeriksanya Apakah IE11 menghapus kompilasi bersyarat javascript? untuk informasi lebih lanjut mengenai topik ini.
Saya telah menggunakan saran yang mereka sampaikan di sana.
Atau, Anda dapat menggunakan typeof document.body.style.msTransform == "string" atau document.body.style.msTransform !== window.undefined atau bahkan 'msTransform' in document.body.style.


6
2017-09-12 16:29



Diperbarui! 24/3/2015 (gulir di bawah jam)

lonesomeday's menjawab Benar-benar benar, saya hanya berpikir saya akan menambahkan berita menarik ini. Saya telah membuat metode beberapa saat lalu untuk mendapatkan browser di Vanilla JS dan akhirnya melengkungkannya untuk menggantikannya jQuery.browser dalam versi jQuery selanjutnya. Ini tidak mengganggu bagian dari lib jQuery baru, tetapi menyediakan fungsionalitas yang sama dari tradisional jQuery.browser objek, serta beberapa fitur kecil lainnya.


Versi Baru yang Diperluas!

Jauh lebih menyeluruh untuk peramban yang lebih baru. Juga, akurasi 90 +% pada pengujian seluler! Saya tidak akan mengatakan 100%, karena saya belum menguji pada setiap browser seluler, tetapi fitur baru ditambahkan $.browser.mobile boolean / string. Ini salah jika tidak mobile, yang lain itu akan menjadi nama String untuk perangkat ponsel atau browser (Tebak Terbaik seperti: Android, RIM Tablet, iPod, dll ...).

Satu peringatan yang mungkin, mungkin tidak berfungsi dengan beberapa peramban yang lebih lama (yang tidak didukung) karena sangat bergantung padanya userAgent tali.

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 Plugin: Dapatkan Browser (Extended Alt Edition)"

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



"Properti $ .browser tidak lagi digunakan di jQuery 1.3, dan fungsinya dapat dipindahkan ke plugin yang didukung tim dalam rilis jQuery mendatang."

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


3
2018-03-09 17:16



Dari dokumentasi resmi di http://api.jquery.com/jQuery.browser/:

Properti ini telah dihapus di jQuery 1.9 dan hanya tersedia melalui plugin jQuery.migrate.

Anda bisa menggunakan misalnya jquery-migrate-1.4.1.js untuk tetap menggunakan kode atau plugin Anda yang menggunakan $ .browser masih berfungsi saat Anda menemukan cara untuk menyingkirkan $ .browser sepenuhnya dari kode Anda di masa mendatang.


0
2017-10-27 00:00