未捕获的TypeError:无法读取未定义的属性“ msie”-jQuery工具


188

我在Chrome开发者控制台中遇到以下错误:

Uncaught TypeError: Cannot read property 'msie' of undefined

我的理解是,这是因为.browser现在在jQuery中已弃用,但是我使用的是jQuery工具的最新版本,并且仍然出现错误,我在js文件中检查了文件并在那里。

我该如何解决这个问题,以免出现错误?


1
此错误不足。您想从哪个元素开始阅读?
Siddharth Gupta

我根本没有.browser在代码中使用过。似乎在jQuery工具文件中正在检测到它。
Colin747

6
browser对象不仅在1.9中被弃用,它已经消失了。如果jQuery Tools仍在使用它,则jQuery Tools已损坏。
尖尖的

1
@Alexander似乎摆脱了错误。您可以根据需要提出答案。
Colin747

3
最新的jQuery工具仅在jQuery 1.7中进行了测试。jQuery 1.9与最新版本的jQuery Tools不兼容;就这么简单。转储jQuery工具或将jQuery降级到1.9以下的任何可用版本。否则,不要指望任何人更新jQuery Tools,因为最近几年一直没有开发人员。
Sparky

Answers:


188

$.browser方法已从jQuery 1.9中删除。

jQuery.browser() removed

jQuery.browser()从jQuery 1.3开始不推荐使用该方法,在1.9中已将其删除。如果需要,它可以作为jQuery Migrate插件的一部分使用。我们建议对诸如Modernizr之类的库使用特征检测。

jQuery Core 1.9升级指南

如升级指南中所述,您可以尝试使用jQuery Migrate插件来恢复此功能并让jQuery工具正常工作。


242

您可以通过AJ查看此解决方案。这非常简单,只需复制并粘贴以下代码行。

jQuery.browser = {};
(function () {
    jQuery.browser.msie = false;
    jQuery.browser.version = 0;
    if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
        jQuery.browser.msie = true;
        jQuery.browser.version = RegExp.$1;
    }
})();

参考


4
这很完美!但是我认为这应该作为补丁而不是解决方案,对吗?
Jobokai 2014年

谢谢,使用一个正在使用此插件的jquery插件,这是一个简单的短期解决方案,直到真正的修补程序推出为止。
Joe Meyer

谢谢。自从我们将JQuery升级到最新版本以来,此修复了Query Tools v1.2.7。
bsentosa 2014年

1
哇,如果我能给你十点好处,我现在就去做。
Iman Hejazi 2014年

9
该答案不再正确,因为IE11在userAgent字符串中没有MSIE令牌。
Dave Methvin

44

在您的jsp / js文件中使用以下脚本标记:

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

这肯定可以工作。


确保您的互联网连接正常。如果您要脱机使用,请在最后下载js文件,然后引用该文件。
Manisha Srivastava 2014年

好吧,我可以看到它是在线托管的……无论如何,感谢我用jquery.noConflict()解决了它,因为我在同一页面上使用了两个版本的jquery。
Prerit Mohan 2014年

@ User5590:任何时间:)
Manisha Srivastava

不应在生产中使用非缩小的jquery:例如,检查cdnjs.com。并改用HTTPS。
塔克曼

27

我在js文件包含之后使用下面的代码,它现在可以正常工作。

<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    jQuery.browser = {};
    (function () {
        jQuery.browser.msie = false;
        jQuery.browser.version = 0;
        if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
            jQuery.browser.msie = true;
            jQuery.browser.version = RegExp.$1;
        }
    })();
</script>

这个链接链接给我错误,但是您写的这段代码对我有很大帮助,谢谢。
萨曼

7

这是GitHub上的jQuery Tools错误。您可以尝试其中一个补丁。

编辑 -在我看来,jQuery工具并没有获得太多支持。我个人不会开始依赖该库的新项目,除非我准备接管自己的支持。


1
+ 1,jQuery Tools在过去几年里完全混乱了。并没有“获得太多支持”是非常准确的,而且存在轻描淡写的说法。我认为自jQuery 1.3以来仅进行了一次小更新,最近几年也没有开发人员。
Sparky

同意,是否有人建议更换磁带库?带有滚动条,覆盖和范围输入滑块的东西?我避免使用jQuery mobile,因为它具有预先设置的样式。我之前已经过款式,这是一场噩梦。
inorganik

5
我已经开始为我想要的每个功能找到写得很好的最小库。即:范围输入滑块:loopj.com/jquery-simple-slider,滚动器/滑块:bxslider.com。我找到了更好的支持,而总的来说占用的空间更小,找到了像这样的单个图书馆
2013年

4

我只是添加了

jQuery.browser = {
    msie: false,
    version: 0
};

jQuery脚本之后,因为我不再关心IE。


3

用替换您的JS

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

链接


目前,对于jQuery 1.7+,最新的jquery-ui是:<link rel="stylesheet" href="https://stackoverflow.com//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
Watchmaker

0

因为我不打算支持所有旧微软IE浏览器的版本,我已经简单地更换所有提及browser.msiefalse。我知道这不是一个很好的解决方案,但是它对我有用。

(实际上,它们显示为!browser.msie,可以从条件中省略。)


0

像吹一样使用

$(function (a) {

。。。。。然后在您的函数中可以使用msie属性,例如

if (a.browser.msie) 
{
}
else 
{
   $(settings.current).after(Uploadelement);
}

祝好运


0

像吹一样使用

我使用此命令并解决

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

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    return;
}

0

使用JQuery 1.10和JQuery UI 1.8时出现此错误。通过更新到最新的JQuery UI 1.11.4,我能够解决此错误。

从Visual Studio更新JQuery UI的步骤:

  • 导航到项目或解决方案
  • 右键单击:“管理NuGet软件包”
  • 在左侧,单击“已安装的软件包”选项卡
  • 查找“ JQuery UI(组合库)”,然后单击“更新”。
  • 如果找到,请选择它并单击更新
  • 如果找不到,请在左侧的“在线> nuget.org”选项卡中找到它,然后单击安装。如果旧版本的Jquery UI版本仍然存在,则可以将其从项目中删除

0

如果您有两次定义jQuery,则可能会收到此错误。例如,如果您正在使用Primefaces(它已经包含jQuery),并且在其他地方定义它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.