当前位置: 代码迷 >> Web前端 >> Ie9 ext tree 失灵
  详细解决方案

Ie9 ext tree 失灵

热度:439   发布时间:2012-09-21 15:47:26.0
Ie9 ext tree 失效

? 我看到好多网上实现ie9ext tree的办法都是通过渲染模式为ie8 或者更低的浏览器,其实现的代码都是添加meta标记(<metahttp-equiv="X-UA-Compatible" content="IE=8" />),这样是可以解决ie9中面板事件失效的问题,但是这不是一个最终的解决办法,通过我一天的调试研究,我修改了下ext-all.js的代码,之后通过一步一步调试,才解决了ie9的这个问题.. 下面我详细说下哪里错了,具体怎么改,以后我们应该注意什么.

1.??????哪里错了:

a)?? 得到ext-all.js的未压缩版,我是得到ext-all.js的压缩版,然后通过js美化,得到清晰地版本,解压的地址为(http://app.baidu.com/webkits)
b)?? 然后找到相应的代码块getAttributeNS 属性所对应的函数属性所对应的函数,代码如下:

[javascript] ? view plain copy
  1. getAttributeNS:?Ext.isIE????
  2. ????????function (ns,?name)?{??
  3. ????????????var ?d?=? this .dom;??
  4. ????????????var ?type?=? typeof ?d[ns?+? ":" ?+?name];??
  5. ????????????if ?(type?!=? "undefined" ?&&?type?!=? "unknown" )?{??
  6. ????????????????return ?d[ns?+? ":" ?+?name]??
  7. ????????????}??
  8. ????????????return ?d[name]??
  9. ????????}:?function (ns,?name)?{??
  10. ????????????var ?d?=? this .dom;??
  11. ????????????return ?d.getAttributeNS(ns,?name)?||?d.getAttribute(ns?+? ":" ?+?name)?||?d.getAttribute(name)?||?d[name]??
  12. ????????}??
(c)? 首先这个方法的作用是:通过命名空间 URI 和名称来获取属性值。
参数 描述
ns
必需。规定从中获取属性值的命名空间 URI。
name 必需。规定从中取得属性值的属性。
(d)? 这段代码在ie9中取属性值得方式错了. 在这块是通过数组的行式来取 取出来的值是null类型,

2.??????怎么改:

将数组的取值方式改为是通过attribute的类型来取.代码如下(为了兼容其他的类型,可能我还对操作属性还不是很理解透彻,所以做的保险一点,不修改原来的代码在后面添加代码 ):

[javascript] ? view plain copy
  1. getAttributeNS:?Ext.isIE???
  2. ????????????function (ns,?name)?{??
  3. ????????????????var ?d?=? this .dom;??
  4. ????????????????var ?type?=? typeof ?d[ns?+? ":" ?+?name];??
  5. ????????????????if ?(type?!=? "undefined" ?&&?type?!=? "unknown" )?{??
  6. ????????????????????return ?d[ns?+? ":" ?+?name]??
  7. ????????????????}??
  8. ????????????????type?=?typeof ?d[name];??
  9. ????????????????if (type?!=? "undefined" ?&&?type?!=? "unknown" )??
  10. ????????????????{??
  11. ????????????????????return ?d[name];??
  12. ????????????????}??
  13. ????????????????type=typeof ?d.getAttribute(ns?+? ":" ?+?name);??
  14. ????????????????if (type?!=? "undefined" ?&&?type?!=? "unknown" )??
  15. ????????????????{??
  16. ????????????????????return ?d.getAttribute(ns?+? ":" ?+?name);??
  17. ????????????????}??
  18. ????????????????type=typeof ?d.getAttribute(name);??
  19. ????????????????if (type?!=? "undefined" ?&&?type?!=? "unknown" )??
  20. ????????????????{??
  21. ????????????????????return ?d.getAttribute(name);??
  22. ????????????????}??
  23. ????????????????return ? null ;??
  24. ????????}:?function (ns,?name)?{??
  25. ????????????var ?d?=? this .dom;??
  26. ????????????return ?d.getAttributeNS(ns,?name)?||?d.getAttribute(ns?+? ":" ?+?name)?||?d.getAttribute(name)?||?d[name]??
  27. ????????}??

我只是在它后面多添加了几次判断,如果没有走方法体内的return,那么就会往下执行,这样可以不会影响ext其他的影响..

3.??????今后应该注意什么:

???????? 这个ext tree的 ie9 bug 是在取dom属性的值时候报了错,所以以后在拿什么样的属性,用getAttribute, 什么样的属性用 数组形式取值, 什么浏览器下,用什么取值方式,都得注意一下,现在我还没有对取值方式没有研究透彻,下次blog里面将会详细介绍如何《js? dom对象 属性值》希望大家多多提意见,


?

  相关解决方案