ie9/8的iframe中jQuery报错

此文章用于对工作中遇到的问题进行记录

jQuery 版本:1.9.1

按照一般的思路,jquery 1.x的是支持ie9及以下的,但是今天发现jquery报错了,代码错误位置在源码版本的第4888行

 "focus": function( elem ) {
	return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);//line 4888
},

本来应该可以很快找到这里的错误的,结果IE9调试一两下就崩溃让我也很崩溃,花了半个多小时才明白错误在这T_T,

原因就是document.activeElement在ie9/8浏览器的iframe里面找不到,然后百度了一下,果然有人比我先遇到这个问题,解决办法也很简单在使用jquery的iframe的head标签里面添加

<script>document.documentElement.focus();</script>

即可。

在搜索的时候,在MDN里面发现了这个tip:

[1] 在IE9中获取iframe中的activeElemet时会抛出异常,比如: parent.document.activeElement 会抛出异常。

原来这是个老坑了!!!

至于ie8会不会,我没有测试,不过相关链接里面第一条的是ie8测试出的问题

相关链接:

  1. IE下 iframe子页面document.documentElement报错问题(未指明的错误。)
  2. https://stackoverflow.com/questions/14378224/document-activeelement-in-iframe-shows-unspecified-error-in-ie-standards-mode
  3. mdn document.activeElement
  4. https://www.telerik.com/forums/window-radopen-gives-document-activeelement-unspecified-error
原文地址:https://www.cnblogs.com/DHclly/p/8304966.html