Skip to content

tjuking/jquery-compatibility

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 

Repository files navigation

jquery-compatibility

jQuery兼容性研究

  • 在Blackberry 4.6浏览器中通过document.getElementById(id)可能会获取到已经从文档中删除掉的元素,可以通过判断其是否含有parentNode来检测
  • 在IE8-浏览器中通过docuemnt.getElementById(id)可能会获取到name属性为该id值得元素,可以通过判断元素的id属性来检测
  • 在IE8-浏览器中,通过innerHTML机制不能序列化标签<link><script>(即不能转换为对应的元素,此时jQuery.support.htmlSerializefalse),jQuery的解决方案是在这些标签的外层包裹div<div> ... </div>
  • 在IE7-浏览器中通过innerHTML机制,写入空白<table>时,会自动生成<tbody>元素(需要剔除,此时的jQuery.support.tbodyfalse
  • 在IE8-浏览器中通过innerHTML机制,会自动剔除前导空白符(需要通过createTextNode()补全,此时的jQuery.support.leadingWhitespacefalse
  • 在IE7-浏览器中通过innerHTML机制将复选框和单选框按钮插入DOM树后,其选中状态checked会丢失(通过赋值defaultChecked解决,此时的jQuery.support.appendCheckedfalse
  • 在IE8-浏览器中通过Object.prototype.toString(xxx)应用到操作DOM的方法或者类似于alert这样的方法,将得到[object Object]而非[object Function]
  • 在IE9-浏览器中访问某些浏览器宿主对象例如location的location.constructor.prototype会抛出异常,需要try/catch
  • 在IE7-浏览器中使用(new Function("return " + data))()将字符串转换JSON,如果未移除传入字符串开头和结尾的空白符就无法正确的解析
  • 在IE8-浏览器中不支持ECMAScript5中指定的JSON对象及其方法
  • 在IE8-浏览器中不支持window.DOMParser对象解析,可以使用ActiveXObject对象来解析XML
  • 要想在全局作用域下执行字符串脚本,必须(为了兼容IE、Chrome和Firefox详情可参考https://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context,对于Chrome的那个修正现在应该是不需要了):(window.execScript || function(data){window["eval"].call(window, data);})(data);
  • 在IE浏览器中连字符样式属性名例如-ms-transform对应的style属性是msTransform而通常其他浏览器中都是连字符后首字母大写,例如MozTransform(在.camelCase(string)方法中需要特殊处理一下)
  • 在IE8-浏览器中,\s不匹配不间断空格\xA0(non-breaking space,还需要处理\uFEFF--Byte Order Mark),需要为.trim(str)方法里的正则特殊处理一下
  • 在Blackberry4.7中,正则对象也有length属性
  • Javascript和DOM元素之间循环引用会导致IE6-7的垃圾回收机制不起作用,内存泄漏,所以jQuery为DOM元素存储数据是在jQuery.cache
  • IE9-浏览器中触发事件时不会把原生事件对象传给监听函数,要通过window.event来获取
  • IE9-浏览器中如果在table元素上访问含有冒号的属性,会抛出一个异常:无效的过程调用或参数
  • IE9-浏览器中在隐藏元素上触发默认行为focus/blur()会抛出异常
  • IE9-和Firefox中通过调用原生方法addEventListener/attachEvent绑定beforeunload事件的回调函数不会被触发,解决方法就是<body onbeforeunload="handler">或者window.onbeforeunload = handler;

About

jQuery兼容性研究

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published