• 前端面试总结(浏览器兼容性)


    1. IE事件绑定:obj.attachEvent(eventName,funName);非IE事件绑定:obj.addEventListerner(eventName,funName,false);false为使用冒泡,true为使用捕获,ie没有捕获只有冒泡
      /** 
      * @description 事件绑定,兼容各浏览器 
      * @param target 事件触发对象 
      * @param type 事件 
      * @param func 事件处理函数 
      */ 
      function addEvent(target, type, func) { 
          if (target.addEventListener) //非ie 和ie9 
              target.addEventListener(type, func, false); 
          else if (target.attachEvent) //ie6到ie8 
              target.attachEvent("on" + type, func); 
          else target["on" + type] = func; //ie5 
      }; 
      
      /** 
      * @description 事件移除,兼容各浏览器 
      * @param target 事件触发对象 
      * @param type 事件 
      * @param func 事件处理函数 
      */ 
      function removeEvent(target, type, func){ 
          if (target.removeEventListener) 
              target.removeEventListener(type, func, false); 
          else if (target.detachEvent) 
              target.detachEvent("on" + type, func); 
          else target["on" + type] = null; 
      };
    2. JS判断浏览器类型:
      function myBrowser(){
          var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
          var isOpera = userAgent.indexOf("Opera") > -1;
          if (isOpera) {
              return "Opera"
          }; //判断是否Opera浏览器
          if (userAgent.indexOf("Firefox") > -1) {
              return "FF";
          } //判断是否Firefox浏览器
          if (userAgent.indexOf("Chrome") > -1){
        return "Chrome";
       }
          if (userAgent.indexOf("Safari") > -1) {
              return "Safari";
          } //判断是否Safari浏览器
          if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) {
              return "IE";
          }; //判断是否IE浏览器
      }
      //以下是调用上面的函数
      var mb = myBrowser();
      if ("IE" == mb) {
          alert("我是 IE");
      }
      if ("FF" == mb) {
          alert("我是 Firefox");
      }
      if ("Chrome" == mb) {
          alert("我是 Chrome");
      }
      if ("Opera" == mb) {
          alert("我是 Opera");
      }
      if ("Safari" == mb) {
          alert("我是 Safari");
      }
    3. 浏览器内核:

      IE: trident内核

      Firefox:gecko内核

      Safari:webkit内核

      Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核

      Chrome:Blink(基于webkit,Google与Opera Software共同开发

    4. <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>ie9以下兼容性问题</title>
      </head>
      <body>
          <div id="js_div" style="background-color:red;">
              <div id="js_btn">按钮</div>
          </div>
          
          <script type="text/javascript">
              (function(){
                  /*主要有:1.事件绑定,1.事件冒泡,3.事件默认行为,4.事件对象,5.H5+C3,6.css hack*/
      
      
                  // 1.事件绑定
                  function myBrowser(){
                      var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
      
                      if (userAgent.indexOf("Opera") > -1) {
                          return "Opera"
                      }; //判断是否Opera浏览器
                      if (userAgent.indexOf("Firefox") > -1) {
                          return "FF";
                      } //判断是否Firefox浏览器
                      if (userAgent.indexOf("Chrome") > -1){
                            return "Chrome";
                      }
                      if (userAgent.indexOf("Safari") > -1) {
                          return "Safari";
                      } //判断是否Safari浏览器
                      if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1) {
                          return "IE";
                      }; //判断是否IE浏览器
                  };
                  function eventOne(){
                      alert("IE 外");
                  };
                  function eventTow(){
                      alert("非IE 内");
                  };
                  var mb = myBrowser();
                  if ("IE" == mb) {
                      document.getElementById("js_btn").attachEvent("onclick",eventTow);
                      document.getElementById("js_div").attachEvent("onclick",eventOne);
      
                  }else{
                      
                      document.getElementById("js_btn").addEventListener("click",eventTow);//默认值为false,false:在冒泡阶段进行/true:在捕获阶段执行
                      document.getElementById("js_div").addEventListener("click",eventOne,true);
                  }
      
                  //2. 事件冒泡
                  function btnClick(event){
                      if(event && event.stopPropagation){
                          event.stopPropagation();//非ie
                      }else{
                          window.event.cancelBubble=true;//ie
                      }
                  }
                  function myfn(e){
                      window.event? window.event.cancelBubble = true : e.stopPropagation();
                  }
      
                  //3.js阻止默认行为
                  function myfn(e){
                      window.event? window.event.returnValue = false : e.preventDefault();
                  }
                  function stopDefault( e ) { 
                      //阻止默认浏览器动作(W3C) 
                      if ( e && e.preventDefault ) 
                          e.preventDefault(); 
                      //IE中阻止函数器默认动作的方式 
                      else 
                          window.event.returnValue = false; 
                      return false; //不仅阻止了事件往上冒泡,而且阻止了事件本身
                  }
      
                  //4. h5引用https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js  c3要添加浏览器厂商前缀http://fetchak.com/ie-css3/ie-css3.htc
      
                  //5. 事件对象....三元写法好  坐标
                  function myfn(e){ 
                      var evt = e ? e:window.event;
                      var src = evt.srcElement ? evt.srcElement : evt.target;
                  }
                  function myFn(e){
                      var evt=e || window.event;
                      var src = evt.srcElement || evt.target; // 获取触发事件的源对象
                  }
      
      
                  //页面刷新location.reload() ;返回上一页history.go(-1);返回并刷新页面location.replace(document.referrer);document.referrer //前一个页面的URL
      
      
                  //页面重定向window.location.href = "http://www.csdn.net";
      
              }());
          </script>
      </body>
      </html>
  • 相关阅读:
    双端队列
    顺序循环队列
    顺序队列
    Counting Triangles(hd1396)
    蒟蒻之栈模拟递归
    链栈以及顺序栈应用—算数表达式
    栈的简单应用-进制转换
    链栈
    共享栈
    顺序栈
  • 原文地址:https://www.cnblogs.com/ahu666/p/6843063.html
Copyright © 2020-2023  润新知