1

我有一个使用 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"(文件单独加载)时有效,而在捆绑时无效(一个文件)。

我的推理正确吗?

4

2 回答 2

2

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

此外,如果您使用 .min.js 文件进行生产,我相信您不应将其包含在捆绑包中。

于 2013-07-30T19:24:20.460 回答
1

你为什么不使用像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]-->  

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

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

于 2013-07-30T23:51:26.833 回答