在IE8中,使用ASP.NET绑定检查jQuery失败



我有一个使用jQuery 2.0+的网站,如果jQuery还没有加载,我想执行一个操作。本质上,我正在检查任何不支持jQuery2的浏览器,如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"(文件单独加载)时工作,而在捆绑(单个文件)时不工作。

我的推理正确吗?

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

此外,如果您在生产中使用.min.js文件,我认为您不应该将其包含在bundel中。

为什么不使用类似modernizr的东西来为您做这些测试?这就是它的设计目的。你甚至可以让它为浏览器加载正确版本的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]-->  

我不知道为什么你会"不支持"旧的浏览器,因为jQuery1.9+是功能兼容的jQuery2.x,你只需要为合适的浏览器加载合适的浏览器。

为什么要进行转换.Clear()?调试模式自动删除缩小。。

最新更新