【问题标题】:jQuery.browser: Javascript Uncaught TypeErrorjQuery.browser:Javascript 未捕获的类型错误
【发布时间】:2012-12-29 13:24:49
【问题描述】:

我遇到了一个错误,导致我的页面无法加载。

未捕获的类型错误:无法读取未定义的属性“msie”

控制台中的错误参考这段代码:

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。

【问题讨论】:

  • 尝试是否通过 typeof(jQuery.browser.msie) 定义值!='undefined
  • 同样的错误 = typeof(jQuery.browser.msie)!='undefined'
  • 你确定 jQuery 已经加载了吗? console.log( typeof jQuery ); 的输出是什么?
  • Cannot read property 'msie' of undefined 表示jQuery.browser 未定义。
  • @Jan:如果jQueryundefined,您将收到错误Cannot read property 'browser' of undefined。无论如何,VisioN 找到了答案。

标签: javascript jquery wordpress typeerror


【解决方案1】:

jQuery.browser 在 1.3 版本中被弃用,最后在 removed 1.9.

source

正如您在current version of jQuery 中看到的,不再有$.browser 属性。

很可能它已移至插件,如docs 所述。

因此,如果您使用最新版本的 jQuery,undefined 错误是可以理解的。

【讨论】:

  • OP 不应包含最新版本,而应包含特定版本
  • @ExplosionPills 但他可能会这样做
  • @JanDvorak 他做到了;我查看了他网站的代码。他通过 wordpress 包含 1.8.3,但随后他还包含一个指向最新版本的 jQuery cdn 的链接
  • 1.8.3 文件破坏了东西,所以我必须包含最新的东西才能工作..我仍然没有找到开发人员加载文件的位置。
  • @JanDvorak 无论出于何种原因,他们将 CDN 更新为指向 1.9,但其他 jQuery 网站没有更新(文档没有更新,jquery.com 仍然说“当前版本”是 1.8 .3).
【解决方案2】:

是的,jQuery.browser 在旧版本中已被弃用并在 1.9 中被删除。所以现在在旧版本中,如果这样编写代码

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

将被替换为

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

干杯!!!

【讨论】:

    【解决方案3】:

    正如VisioNanswer 所提到的,这已在 jQuery 1.9 中被删除,并且似乎不会很快恢复。

    如果您希望使用插件将$.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 }


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

    【讨论】:

    • a.browserArray[b].toLowerCase() 抛出未定义的错误。如果我把 .toLowerCase() 拿出来,它就可以了!
    • 谢谢。干得好!
    【解决方案4】:

    您可以使用 jQuery.Migrate 库来支持已弃用的函数,例如 $.browser。

    https://github.com/jquery/jquery-migrate/#readme

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多