源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)

  • 时间:2020-04-23 19:32 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
首先这里声明一下,关于我测试浏览器的版本是chrome15.0.874.121 Firefox 8.01 IE9 IETester 下面的代码关于声明 1:获得滚动条的情况
[u]复制代码[/u] 代码如下:
function getScroll(){         var t, l, w, h;         if (document.documentElement && document.documentElement.scrollTop) {             t = document.documentElement.scrollTop;//滚动条的顶端             l = document.documentElement.scrollLeft;//滚动条的左端             w = document.documentElement.scrollWidth;//滚动条的宽度,也就是页面的宽度             h = document.documentElement.scrollHeight;//滚动条的高度         }         else             if (document.body) {                 t = document.body.scrollTop;                 l = document.body.scrollLeft;                 w = document.body.scrollWidth;                 h = document.body.scrollHeight;             }         return {             t: t,             l: l,             w: w,             h: h         };     }
2:获得视图浏览器的宽度高度
[u]复制代码[/u] 代码如下:
  function getPageWidth(){         var pageWidth = window.innerWidth;         if (typeof pageWindth != "number") {             if (document.compatMode == "CSS1Compat") {                 pageWidth = document.documentElement.clientWidth;             }             else {                 pageWidth = document.body.clientWidth;             }         }         return pageWidth;     }     function getPageHeight(){         var pageHeight = window.innerHeight;         if (typeof pageWindth != "number") {             if (document.compatMode == "CSS1Compat") {                 pageHeight = document.documentElement.clientHeight;             }             else {                 pageHeight = document.body.clientHeight;             }         }         return pageHeight;     }
3:获得当前浏览器型号 名字
[u]复制代码[/u] 代码如下:
function(){         var Sys = {};         var ua = navigator.userAgent.toLowerCase();         var s;         (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] : (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] : (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;         if (Sys.ie != null) {             return ("IE:" + Sys.ie);//判断IE浏览器及版本号         }         if (Sys.firefox != null) {             return ("firefox:" + Sys.firefox);//判断firefox浏览器及版本号         }         if (Sys.chrome != null) {             return ("chrome:" + Sys.chrome);//判断chrome浏览器及版本号         }         if (Sys.opera != null) {             return ("opera:" + Sys.opera);//判断opera浏览器及版本号         }         if (Sys.safari != null) {             return ("safari:" + Sys.safari);//判断safari浏览器及版本号         }     }
4:事件监听
[u]复制代码[/u] 代码如下:
function(element, type, handler){         if (element.addEventListener) {             element.addEventListener(type, handler, false);         }         else             if (element.attachEvent) {                 element.attachEvent("on" + type, handler);             }             else {                 element["on" + type] = handler;             }     }
5:事件移除
[u]复制代码[/u] 代码如下:
function(element, type, handler){         if (element.removeEventListener) {             element.removeEventListener(type, handler, false);         }         else             if (element.detachEvent) {                 element.detachEvent("on" + type, handler);             }             else {                 element["on" + type] = null;             }     }
6:获得event,Firefox事件不断派发的时候,第一次事件会出现问题。
[u]复制代码[/u] 代码如下:
function(event){         event = (event ? event : window.event);         if (event == null) {             var $E = function(){                 var c = $E.caller;                 while (c.caller)                     c = c.caller;                 return c.arguments[0]             };             __defineGetter__("event", $E);         }         return event;     }
7:阻止默认事件
[u]复制代码[/u] 代码如下:
function(event){         if (event.preventDefault) {             event.preventDefault();         }         else {             event.returnValue = false;         }     }
8:不继续传播事件
[u]复制代码[/u] 代码如下:
function(event){         if (event.stopPropagation) {             event.stopPropagation();         }         else {             event.cancelBubble = true;         }     }
9:获得event的target
[u]复制代码[/u] 代码如下:
function(event){         return event.target || event.srcElement;     }
10:documen.doctype支持不一致 E:如果存在文档类型说明,会将其错误的解释为一个注释并把它当做Comment节点,document.doctype的值始终是null。 Firefox:如果存在文档类型说明,则将其作为文档的第一个子节点,document.doctype是一个DocumentType节点,也可以通过firstChild或者childNodes[0]访问同一个节点。 Safari、Chrome、Opera:如果存在文档类型说明,则将其作为解释,但不作为文档的子节点,不会出现在childNodes中的。 11:查找元素 我有时候,我真搞不明白,IE总是在搞什么,总是想标新立异。如果系统不让自带浏览器的话,我敢说,IE的份额将会更少。 如果id和name一样的话,他也将被返回
[u]复制代码[/u] 代码如下:
<html>     <head>      <script defer>       var item=document.getElementById("my");    item.value="SECOND";      </script>     </head>     <body>      <input type="text" name="my" value="FIRST" >     </body> </html>
在IE中,结果变化了。 同样是IE,Id大小写不区分
[u]复制代码[/u] 代码如下:
<html>     <head>      <script defer>       var item=document.getElementById("MY");    item.value="SECOND";      </script>     </head>     <body>      <input type="text" id="my" value="FIRST" >     </body> </html>
不好意思,他的结果又变化了。 12:如果是自定义属性的话,item.myattributs在非IE浏览器的情况下,是无法得出正确结果的。
[u]复制代码[/u] 代码如下:
function(item,myatt){   return item.attributes[myatt].value;  }
同样的话,设置属性应该知道怎么办吧,就是赋值呗。
[u]复制代码[/u] 代码如下:
function(item,myatt,value){   item.attributes[myatt].value=value;  }
13:元素的子节点个数
[u]复制代码[/u] 代码如下:
 <ul id="myul">    <li>first</li>    <li>second</li>    <li>third</li>   </ul>
IE结果是3,其他浏览器是7。 Node之间的空白符,在其他浏览器是文本节点,结果就是7。如果变成这样,
[u]复制代码[/u] 代码如下:
<ul id="myul"><li>first</li><li>second</li><li>third</li></ul>
这样大家的结果都是3了。 14:创立节点问题
[u]复制代码[/u] 代码如下:
//动态添加Element,所有的浏览器都可以实现 var newnode=document.createElement("input"); newnode.type="button"; newnode.value="sixth"; //在IE中可以还这么实现 var newnode= document.createElement("<input type=\"button\">");
15:在屏蔽右键的时候,firefox与其他的不一样,在oncontextmenu事件中。 16:还有动态添加style和script的时候,IE和其他的浏览器是不一样的。具体查查。 17:对于DOM2和DOM3,情况更复杂了。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部