兼容性问题

先说说JS。
听B乎上的大神讲,之所以IE的兼容性这么辣鸡,是因为别的厂商故意绕开微软的实现。。。。比如(这些东西看看就好,现在大多数web不支持IE9以下了):

IE不支持DOM ready


解决方案

function myReady(fn){

    //对于现代浏览器,对DOMContentLoaded事件的处理采用标准的事件绑定方式
    if ( document.addEventListener ) {
        document.addEventListener("DOMContentLoaded", fn, false);
    } else {
        IEContentLoaded(fn);
    }

    //IE模拟DOMContentLoaded
    function IEContentLoaded (fn) {
        var d = window.document;
        var done = false;

        //只执行一次用户的回调函数init()
        var init = function () {
            if (!done) {
                done = true;
                fn();
            }
        };

        (function () {
            try {
                // DOM树未创建完之前调用doScroll会抛出错误
                d.documentElement.doScroll('left');
            } catch (e) {
                //延迟再试一次~
                setTimeout(arguments.callee, 50);
                return;
            }
            // 没有错误就表示DOM树创建完毕,然后立马执行用户回调
            init();
        })();

        //监听document的加载状态
        d.onreadystatechange = function() {
            // 如果用户是在domReady之后绑定的函数,就立马执行
            if (d.readyState == 'complete') {
                d.onreadystatechange = null;
                init();
            }
        }
    }
}
  1. IE 不支持2级DOM事件,有他自己的方法。

var eventUtil={
            // 添加句柄
            addHandler: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;
               }
            },
            // 删除句柄
            removeHandler: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;
               }
            },
          //获取事件
          getEvent:function(event){
            return event?event:window.event;
          },
          //得到事件类型
          getType:function(event){
            return event.type;
          },
          //得到节点类型
          getElement:function(event){
            return event.target || event.srcElement;
          },
          //停止事件动作
          preventDefault:function(event){
            if(event.preventDefault){
              event.preventDefault();
            }else{
              event.returnValue=false;
            }
          },
          //停止冒泡
         stopPropagation:function(event){
           if(event.stopPropagation){
             event.stopPropagation();
           }else{
             event.cancelBubble=true;
           }
         }
  }

所以啊,JQ的出现,真的是解放了生产力。JQ的一小步, WEB的一大步。后来的后来,微软后出的Edge,反过来兼容chrome们,这真的是极好的。JS babel的出现,可以把最新的JS标准(ES6)转为上一代(ES5),就可以很方便的使用class,promise等一堆东西。

还有一个不算坑的东西CSS。
不管是不是MS,CSS3在老家伙上,照样不行。这个CSS3带来了很多好东西,什么FLEX布局,很多实用的选择器。但是吧,要告别这别老的浏览器,只能用时间去解决。

由于每一家的实现不一样,各种前缀满天飞,什么--chrom,什么--firefox,什么--opera,好消息是可以用less,sass等工具自动填充。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,692评论 1 92
  • 1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Nul...
    极乐君阅读 10,999评论 0 106
  • 真是硬着头皮读完的,不能称为侦探小说的小说 作者写这个是站在了日本社会关于核电站建设的角度来写,想表现带给人生活的...
    白若丁阅读 3,030评论 0 1
  • 柔水至上 柔可胜刚最称奇 水滴石穿见功力 至柔至刚天地理 上善若水润万物
    孤石刘琳锋阅读 1,684评论 0 0
  • 1、二十三窜一窜 健高身高管理师:错!!! 老观念认为:孩子有“早长和晚长之分,二十三岁还能窜一窜”。 其实这种俗...
    身高管理师阅读 9,874评论 2 13

友情链接更多精彩内容