我有一个使用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"
(单独加载文件)时解决原因并且在捆绑(单个文件)时不起作用的唯一原因。
我的推理是否正确?
答案 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()?调试模式自动删除缩小..