JQMIGRATE:jQuery.browser 已弃用,无法读取未定义的属性“mozilla”

Posted

技术标签:

【中文标题】JQMIGRATE:jQuery.browser 已弃用,无法读取未定义的属性“mozilla”【英文标题】:JQMIGRATE: jQuery.browser is deprecated and cannot read property 'mozilla' of undefined 【发布时间】:2021-03-24 20:18:22 【问题描述】:

我正在尝试将我的 JQuery 版本从 1.3.2 迁移到 3.5.1。为此,我将 JQuery 从 1.3.0 迁移到 1.12.4。然后到 3.0.0。 但问题是,在迁移到 1.12.4 时,它毫无例外地显示警告为“不推荐使用浏览器”。并且迁移到3.0.0后,安装成功。

JQMIGRATE:已安装 Migrate,版本 3.0.0 但它会在 jquery-ui-1.7.1.custom.min.js 中引发异常。

jquery-ui-1.7.1.custom.min.js:10 Uncaught TypeError: Cannot read property 'mozilla' of undefined

请建议应该做什么。

【问题讨论】:

【参考方案1】:

如果你不想升级你的 jQuery-UI-1.7.3 版本,你可以通过在jquery-ui-1.7.3.custom.min.js 文件的最顶部添加以下“shim”函数来修补它。或者放在其他地方,只要它在jquery-ui-1.7.3.custom.min.js之前加载。

// patch deprecated $.browser
;;(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);

(感谢https://***.com/a/24206540/。)

【讨论】:

以上是关于JQMIGRATE:jQuery.browser 已弃用,无法读取未定义的属性“mozilla”的主要内容,如果未能解决你的问题,请参考以下文章

更新到 JQuery 3.6.0,Jquery UI 出现 JQMigrate 错误

关于jquery $.browser 报错问题

jQuery.browser:Javascript 未捕获的类型错误

使用 jQuery.browser 区分 Chrome 和 Safari

jquery1.9不支持browser对象的解决方案

JQuery 判断浏览器及其版本