2013-01-15 62 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

无论如何感谢。做得好! –

相关问题