
我正在寻找一个解释,为什么一个特定的修复工作,所以我可以更好地理解正在发生的机制.
我有一个ASP.NET MVC 5应用程序; “一切都工作得很好”(TM),直到我允许NuGet更新j@R_404_5962@包.
然后,当我尝试在IE 10中运行webapp时,我开始收到错误消息/异常:
Unhandled exception at line 3398,column 4 in http://localhost:53242/Scripts/j@R_404_5962@-2.1.0.Js0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'addEventListener'Unhandled exception at line 7,column 38 in http://localhost:53242/Scripts/bootstrap.Js0x800a139e - JavaScript runtime error: bootstrap requires j@R_404_5962@我无法使用firefox和Chrome重新创建.当我在这些浏览器中打开页面时,firefox 27和Chrome 31都没有抛出这些错误.
这是j@R_404_5962@-2.1.0.Js的相关部分
j@R_404_5962@.ready.promise = function( obj ) { if ( !readyList ) { readyList = j@R_404_5962@.Deferred(); // Catch cases where $(document).ready() is called after the browser event has already occurred. // we once trIEd to use readyState "interactive" here,but it caused issues like the one // discovered by ChrisS here: http://BUGs.j@R_404_5962@.com/ticket/12282#comment:15 if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready setTimeout( j@R_404_5962@.ready ); } else { // Use the handy event callback document.addEventListener( "DOMContentLoaded",completed,false ); //This is line 3398 // A fallback to window.onload,that will always work window.addEventListener( "load",false ); } } return readyList.promise( obj );};我找到的修复是添加此行
到< head>我的_Layoutbootstrap.csHTML文件.
我的问题:
为什么将元标记添加到文档的头部可以解决我看到的错误?
给出的解释是标签“强制IE使用它可以使用的最佳模式”.假设这是正确的,这是什么意思,为什么IE没有能够找出没有该标签的正确行为?
full detail here中描述的问题以及在不受支持的IE 8中具有相同问题的另一个人.如果您感到好奇,重新创建的步骤大约包含在帖子的2/3之内.最佳答案它解决了您的问题,因为通过添加兼容性标志,您将强制浏览器进入最新版本,而不是允许它选择兼容模式(这是ie7模式,j@R_404_5962@ 2.x不支持)
IE默认为兼容模式,具体取决于您在浏览器中设置的设置.例如,默认情况下,Intranet站点(本地网站)将以兼容模式自动打开.
当使用旧版本的IE(IE< 10)时,您应该使用条件注释来包含1.1x版本的j@R_404_5962@,这将完全避免此问题,允许您的用户使用他们想要的任何浏览器而无需修改他们的设置正确使用您的申请. 总结
以上是内存溢出为你收集整理的试图理解为什么元兼容性标记解决了jQuery错误全部内容,希望文章能够帮你解决试图理解为什么元兼容性标记解决了jQuery错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)