2013-01-15 90 views
7

我遇到了一個錯誤,不會讓我的頁面加載。jQuery.browser:Javascript未捕獲TypeError

Uncaught TypeError: Cannot read property 'msie' of undefined

在控制檯中的錯誤是指這樣的代碼:

if (jQuery.browser.msie) 
    extra_px += 3; 
                // Fix Link Clicking on IE 7 and below versions 
if (jQuery.browser.msie && Number($.browser.version) < 8) { 
    span_text.css('cursor', 'pointer'); 
    span_text.click(function() { 
     window.location = menu_item.parent().attr("href"); 
    }); 
} 

奇怪的是,事發突然,我沒有改變任何事情。作爲參考,我使用Wordpress。

+0

嘗試,如果該值通過typeof運算(jQuery.browser.msie)定義!= '未定義 – Bernhard

+0

同樣的錯誤與= typeof運算(jQuery.browser.msie)!=' 不確定」 – TonalDev

+3

確定jQuery被加載? 'console.log(typeof jQuery)的輸出是什麼;'? – JJJ

回答

15

jQuery.browser was deprecated in version 1.3, and finally removed in 1.9.

source

正如你可以看到current version of jQuery,沒有$.browser財產了。

很可能它被轉移到插件,如docs中所述。

因此,如果您使用最後一個版本的jQuery,undefined錯誤是可以理解的。

+0

OP不應該包含最新版本,但是特定版本 –

+0

@ExplosionPills,但他可能做到了 –

+1

@JanDvorak他做的;我看着他網站的代碼。他包括1.8.3通過wordpress,但他還包括一個鏈接到最新版本的jQuery cdn –

4

是,jQuery.browser在舊版本棄用,在1.9.So除去現在在舊的版本,如果代碼寫成這樣

isIE6 = jQuery.browser.msie && jQuery.browser.version < 7 && !window.XMLHttpRequest, 

將被取代它由

isIE6 = navigator.userAgent.match(/msie [6]/i) && !window.XMLHttpRequest, 

乾杯! !

2

由於VisioNanswer提到,這在jQuery 1.9中被刪除,並且不會很快回來。

如果你想工作的插件來READD $.browser你的jQuery庫,只需複製&粘貼下面的代碼到一個文件和jQuery後在任何地方連接的腳本:

;;(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); 

jsFiddle


傳統上使用:if ($.browser.msie) { doWork }


/** \t jQuery.browser 
 
* \t @author \t J.D. McKinstry (2014) 
 
* \t @description \t Made to replicate older jQuery.browser command in jQuery versions 1.9+ 
 
* \t @see http://jsfiddle.net/SpYk3/wsqfbe4s/ 
 
* 
 
* \t @extends \t jQuery 
 
* \t @namespace \t jQuery.browser 
 
* \t @example \t jQuery.browser.browser == 'browserNameInLowerCase' 
 
* \t @example \t jQuery.browser.version 
 
* \t @example \t jQuery.browser.mobile \t @returns \t BOOLEAN 
 
* \t @example \t jQuery.browser['browserNameInLowerCase'] 
 
* \t @example \t jQuery.browser.chrome \t @returns \t BOOLEAN 
 
* \t @example \t jQuery.browser.safari \t @returns \t BOOLEAN 
 
* \t @example \t jQuery.browser.opera \t @returns \t BOOLEAN 
 
* \t @example \t jQuery.browser.msie \t @returns \t BOOLEAN 
 
* \t @example \t jQuery.browser.mozilla \t @returns \t BOOLEAN 
 
* \t @example \t jQuery.browser.webkit \t @returns \t BOOLEAN 
 
* \t @example \t jQuery.browser.ua \t @returns \t 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>

+0

a.browserArray [b] .toLowerCase()拋出一個未定義的錯誤。如果我將.toLowerCase()取出,它就可以工作! –

+0

無論如何感謝。做得好! –

相關問題