【问题标题】:Checking for jQuery using ASP.NET Bundling fails with IE8在 IE8 中使用 ASP.NET 捆绑检查 jQuery 失败
【发布时间】:2013-07-30 18:55:20
【问题描述】:

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

我的推理正确吗?

【问题讨论】:

  • 我最终通过从包中排除 jquery.check.js 并将其添加为单独的参考来解决问题。这基本上证明了我的想法是对的。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    <!--[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()?调试模式自动删除缩小..

    【讨论】:

    • 目前决定不支持 IE8 有两个原因:1. IE8 用户占我们访问者的一小部分,并且下降速度很快; 2. 该网站仅使用 jQuery 2.0+ 进行了测试.我们还没有时间用 IE8 和 1.9 重新测试它。此外,我不想依赖浏览器的特定条件,检查函数是否存在,属性是更好的方法。如果您阅读了发布代码中的 cmets,我有意删除缩小以进行调试。在我弄清楚发生了什么之后,这条线被删除了。
    • @JonasStawski - 我希望这对你有用。我的经验是,总是发现一些高价值客户正在使用 IE8,突然间你就迫不及待地想要让它工作了。无论如何,您仍然可以使用 jQuery 版本测试。再一次,jQuery 1.9+ 和 2.0+ 在功能上是相同的,并且已经被 jQuery 测试过了。
    • 感谢您的意见。在游戏的这一点上,我们需要加快步伐,这意味着将 IE8 抛在后面。我同意我们可能会失去一些重要的 IE8 用户,如果发生这种情况,我们会很快发现并需要通过您的一种方法开始支持它...
    • @JonasStawski - 实际上,在这一点上,如果 IE 小于 9,为什么不直接使用上面的条件 cmets 并重定向到“不支持”页面?不需要 jQuery 检查。
    • 因为只有IE 8及以下版本,所以其他任何jQuery 2.0+不支持的浏览器都无法使用
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2017-01-17
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多