使用ASP.NET Bundling检查jQuery失败了IE8

时间:2013-07-30 18:55:20

标签: jquery asp.net-mvc-4 internet-explorer-8 bundling-and-minification jquery-2.0

我有一个使用jQuery 2.0+的网站,如果没有加载jQuery,我想执行一个动作。本质上,我正在检查任何不支持jQuery 2的浏览器,如IE8,7,6等。

我在jquery.check.js中这样做了

if (typeof window.jQuery == 'undefined') {
    //show not supported page
}

BundleConfig正在进行这样的捆绑:

var b1 = new ScriptBundle("~/bundle/js").Include(
            "~/Scripts/jquery-{version}.js",
            "~/Scripts/jquery.check.js"
            );
        b1.Orderer = new InputBundleOrderer();
        b1.Transforms.Clear(); //this removes the mimification for debugging purposes

        bundles.Add(b1);

debug="true"上时代码运行正常。转到false时,它不起作用。在使用IE8进行调试时,永远不会达到if语句,并且存在大量错误。

听起来IE8在发生错误时停止执行JavaScript文件,因此永远不会到达代码块。这是我能够在debug="true"(单独加载文件)时解决原因并且在捆绑(单个文件)时不起作用的唯一原因。

我的推理是否正确?

2 个答案:

答案 0 :(得分:2)

据我所知你是对的。一旦发生错误,脚本就会停止执行该文件。 如果你真的想把它们放在同一个文件中,你可以试着用try / catch / finaly块来包围jQuery声明(不确定它是一个很好的想法:|)

此外,如果您使用.min.js文件进行制作,我相信您不应该将其包含在bundel中。

答案 1 :(得分:1)

为什么不使用modernizr之类的东西为你做这些测试?这就是它的设计目标。您甚至可以为浏览器设置load the correct version of jQuery。虽然更简单的选择就是使用条件评论。

<!--[if lt IE 9]>  
  <script src="jquery-1.9.0.js"></script>  
<![endif]-->  
<!--[if (gte IE 9) | (!IE)]><!-->  
  <script src="jquery-2.0.0.js"></script>  
<!--<![endif]-->  

我不确定为什么你会“不支持”旧浏览器,因为jQuery 1.9+是兼容功能的jQuery 2.x,你只需要为正确的浏览器加载正确的浏览器。

你为什么要做transforms.Clear()?调试模式自动删除缩小..