兼容IE跨平台解决方案

Chrome 91 版本新特性& 91 版本发行说明 Chrome 浏览器于 2021 年 5 月 25 号发布了 91 版本,新增了不少特性。 1、Chrome 浏览器更新说明 Chrome 暂停了折叠的标签组 Chrome 阻止了端口 10080,并添加了允许特定端口的策略 Chrome 启用了量子计算机安全防护 Chrome 不再允许 TLS 1.0 或 TLS 1.1 当用户登录操作系统时,PWA 可以启动 如果用户在已知的网络钓鱼站点上重复使用保存的密码,则 iOS 上的 Chrome 会警告用户 Chrome 引入了 initial_pref. 阅读详情

兼容IE跨平台解决方案

目前对于es5的支持,chrome是比较完善的,很多开发平台也借助于webkit内核,所以使用chrome开发是一个很不错的选中。但是ie8-多个版本的兼容性也是让无数程序员头疼的事,那么下面会针对几种比较典型的兼容做下总结,该总结多数参考js高级编程内部源码和自身遇到的一些兼容问题,刚开始撰写此类博客,希望大家多多指出问题。


普通兼容问题

属性描述IEChrome
select的optionsoptions(index)options[index]
孩子元素childNodeschildren
第一个孩子元素firstChildfirstElementChild
最后一个孩子元素lastChildlastElementChild
ActiveXObject做ajax请求返回的驼峰属性写法可能没有值responsetext,readystateresponseText,readyState
函数声明function String.prototype.trim(){}String.prototype.trim = function(){}

showModalDialog与dialogArgments兼容

简单写一些解决方式,后期会继续跟进

//触发showModalDialog方法的父窗口代码
(function(){
    window.showModalDialog = function(strUrl,args,styleStr){
            window.open(strUrl,"弹出窗口","height=600px","width=500px","top=100px","resizable=yes");
            window.dialogArguments = args;
        }
})();
//子窗口代码
(function(){
      if(window.opener){
           window.dialogArguments = window.opener.dialogArguments;
       }
})();

事件兼容

code如下

   window.ct = {};
   (function(NS){
       var EventUtil = {
           addHandler:function(element, type, handler){
              if(element.addEventListener){
                 element.addEventListener(type,handler,false);//Chrome支持
              } else if(element.attachEvent){
                 element.attacheEvent("on" + type, handler);//IE9+支持
              }else{
                 element["on" + type] = handler;//IE8-支持
              }
           },
           removeHandler:function(element, type, handler){
              if(element.removeEventListener){
                 element.removeEventListener(type, handler, false);//Chrome支持
              }else if(element.detachEvent){
                 element.detachEvent("on" + type, handler);//IE9+支持
              }else{
                 element["on" + type] = null;//IE8-支持
              }
           },
           getEvent:function(event){
             return event ? event : window.event;
           },
           getTarget:function(event){
             return event.target || event.srcElement;
           },
           getClipboardText:function(event){
             var clipboardData = (event.clipboardData || window.clipboardData);
             return clipboardData.getData("text") ;
           },
           setClipboardText:function(event,value){
              if(event.clipboardData){
                  return event.clipboardData.setData("text/plain",value);
              }else if(window.clipboardData){
                  return window.clipboardData.setData("text",value);
              }
           },
           preventDefault:function(event){
             if(event.preventDefault){
                event.preventDefault();
             }else{
                event.returnValue = false;
             }
           },
           stopPropagation:function(event){
              if(event.stopPropagation){
                 event.stopPropagation();
              }else{
                 event.cancelBubble = true;
              }
           }
       }
       NS.EventUtil = EventUtil;
   })(window.ct);  

XPath兼容

   window.ct = {};
   (function(NS){
       var createDocument = function(){
          if(typeof arguments.callee.activeXArg != "string"){
              var versions = ["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument"],
                  i, len;
              for(i=0, len=versions.length; i< len; i++){
                  try{
                     new ActiveXObject(versions[i]);
                     arguments.callee.activeXArg = versions[i];
                     break;                  
                  }catch(e){
                     //step
                  }
              }
          }
          return new ActiveXObject(arguments.callee.ActiveXArg);
       }

       var parseXml = function(xml){
          var xmldom = null;
          if(typeof DOMParser != "undefined"){
              xmldom = (new DOMParser()).parseFromString(xml,"text/xml");
              var errors = xmldom.getElementsByTagName("parsererror");
              if(errors.length){
                 throw new Error("XML parsing error: " + error[0].textContent);
              }
          }else if(typeof ActiveXObject != "undefined"){
              xmldom = createDocument();
              xmldom.loadXML(xml);
              if(xmldom.parseError != 0){
                 throw new Error("XML parsing error: " + xmldom.parserError.reason);
              }
          }else{
              throw new Error("No XML parser avaiable");
          }
          return xmldom;
       }
       var serializeXml = function(xmldom){
          if(typeof XMLSerializer != "undefined"){
              return (new XMLSerializer()).serialToString(xmldom);
          }else if(typeof xmldom.xml != "undefined"){
              return xmldom.xml;
          }else{
              throw new Error("Could not serialize XML DOM.");
          }
       }

       var selectSingleNode = function(context, expression, namespaces){
           var doc = (context.nodeType != 9 ? context.ownerDocument : context);
           if(typeof doc.evaluate != "undefined"){
               var nsresolver = null;
               if(namespaces instanceof Object){
                  nsresolver = function(prefix){
                      return namespaces[prefix];
                  }
               }
               var result = doc.evaluate(expression, context, nsresolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
               return (result != null ? result.singleNodeValue : null);
           } 
       }

       var selectNodes = function(context, expression, namespaces){
           var doc = (context.nodeType != 9 ? context.ownerDocument : context);

           if(typeof doc.evaluate != "undefined"){
               var nsresolver = null;
               if(namespaces instanceof Object){
                    nsresolver = function(prefix){
                        return namespaces[prefix];
                    }
               }
               var result = doc.evaluate(expression, context, nsresolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
               var nodes = new Array();
               if(result != null){
                   for(var i=0,len=result.snapshotLength;i<len;i++){
                       nodes.push(result.snapshotItem(i));
                   }
               }
               return nodes;
           }else if(typeof context.selectNodes != "undefined"){
              //创建命名空间字符串
              if(namespaces instanceof Object){
                  var ns = "";
                  for(var prefix in namespaces){
                      if(namespaces.hasOwnProperty(prefix)){
                          ns += "xmlns:" + prefix + "='" + namespaces[prefix] + "' ";
                      }
                      doc.setProperty("SelectionNamespaces",ns);
                  }
                  var result = context.selectNodes(expression);
                  var nodes = new Array();

                  for(var i=0,len=result.length;i<len;i++){
                      nodes.push(result[i]);
                  }
                  return nodes;
              }else{
                  throw new Error("No XPath engine found");
              }
           }
       }
       NS.CustomXML = {
           parseXml: function(xml){
              return parseXml(xml); 
           },
           serializeXml: function(xmldom){
              return serializeXml(xmldom);
           },
           selectNodes: function(context, expression, namespaces){
              return selectNodes(context, expression, namespaces);
           } ,
           selectSingleNode: function(context, expression, namespaces){
              return selectSingleNode(context, expression, namespaces);
           }
       }
   })(window.ct);

XMLRequestHttp兼容

  • XMLRequestHttp各个浏览器支持情况
    IE7+,Firefox,Opera,Chrome和Safari支持原生XMLRequestHttp
  • onreadystatechange运行
    下面的代码中onreadystatechange中会直接使用XHR,这样的处理方式是DOM0级方法为XHR对象添加了事件处理程序,原因是并不是所有的浏览器都辉支持DOM2级方法,所以有的浏览器内部处理此事件时,可能不会向其传递event事件对象,那么为了所有平台都兼容,最好的处理方式就是使用XHR对象本身来确定下一步应该会怎么做。注意:此方法建议在open之前调用
  • readyState几种状态的讲解
    对于XHR请求,绝大多数情况下都会使用异步请求。 当异步请求时,readyState的这个值是至关重要的,它表示请求响应过程的当前活动阶段。0:未初始化,尚未调用open方法;1:启动,已经调用open方法,但未调用send方法;2:发送 已经调用send方法,但尚未接到服务端相应; 3:接收,但是只接收了部分响应;4:完成,已经接收了全部响应数据,二期已经可以在客户端使用了
  • state几种状态值的讲解
    在接收响应后,我们认为是readyState数值为4时为最佳判断state时机。这时不得不普及一下HTTP响应值state的意义。状态为200时,为成功的标志。此时responseText的内容已经准备就绪,而且在内容类型正确的情况下,responseXML也应该能够访问了。如果状态代码304标识请求的资源并没有被修改,可以直接使用浏览器的缓存版本。
  • open方法的讲解
    接受3个参数,第一个是请求类型get或者post;第二个是url;第三个表示是否异步。另外需要说明两点:意识URL相对于执行代码的当前页面(可以使用绝对路径);而是open方法并不会真正发送请求。
  • send方法的讲解
    send方法只接受一个参数,作为请求主体发送的数据,如果不需要通过请求主体(即post),则必须传入null,这个参数对于浏览器是必须的。调用send后,请求会发送到服务器上进行处理。
    window.ct = {};
    (function(NS){
        var createXHR = function(){
            if(typeof XMLHttpRequest != "undefined"){
                return new XMLHttpRequest();
            }else if(typeof ActiveXObject != "undefined"){
                if(typeof arguments.callee.activeXString != "string"){
                    var versions = ["MSXML.XMLHttp.6.0","MSXML.XMLHttp.3.0","MSXML.XMLHttp"],
                        i,len;
                    for(i=0,len=version.length;i<len;i++){
                        try{
                           new ActiveXObject(versions[i]);
                           arguments.callee.activeXString = versions[i];
                           break;
                        }catch(e){
                           //step
                        }
                    }
                }
                return new ActiveXObject(arguments.callee.activeXString);
            }else{
                throw new Error("No XHR object available.");
            }  

            NS.XHRUtil = {
                createXHR:function(){
                    return createXHR();      
                }    
            }
        } 
    })(window.ct);
    //下面是测试代码
    (function(NS){
        var XHRUtil = NS.XHRUtil;
        var xhr = createXHR();
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4){//readyState 0:未初始化 1:启动,已经调用open方法,但未调用send方法 2:发送 已经调用send方法,但尚未接到服务端相应 3:接收,但是只接收了部分响应 4:完成,已经接收了全部响应数据,而且已经可以在客户端使用了
                if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){
                    console.info("successful responseText: " + xhr.responseText)
                }else{
                    console.error("Request was unsuccessful: " + xhr.status);
                }
            } 
        } 
        xhr.open("get","url",true);
        xhr.send(null);
    })(window.ct);

选择部分文本

主要解决IE的兼容选择部分文本

window.ct = {};
(function(NS){
    var selectText = function(textbox, startIndex, stopIndex){
        if(textbox.setSelectionRange){
            textbox.setSelectionRange(startIndex, stopIndex);
        }else if(textbox.createTextRange){
            var range = textbox.createTextRange();
            range.collapse(true);
            range.moveStart("character",startIndex);
            range.moveEnd("character",stopIndex - startIndex);
            range.select();
        }
        textbox.focus();
    }
    NS.SelectRangeUtil = {
       selectText:function(textbox, startIndex, stopIndex){
           return selectText(textbox, startIndex, stopIndex); 
       } 
    }
})(window.ct);
//测试代码
(function(NS){
   var selectText = NS.SelectRangeUtil.selectText;
   var textbox = document.createElement("input");
   textbox.type = "text";
   textbox.value = "Hello world";
   document.body.appendChild(textbox);
   //选择所有文本
   selectText(textbox,0,textbox.value.length);

   //选择前2个字符
   selectText(textbox,0,2);

   //选择4到第6个字符
   selectText(textbox,4,7); 
})(window.ct);
前端面试:所问到的兼容问题 一、首先你要知道的是兼容是哪些问题 前端兼容性问题分三类: 浏览器兼容问题IE6、7、8不支持HTML5、CSS3、SVG标准,可被判定为“极难兼容” IE9不支持Flex、Web Socket、WebGL,可被判定为“较难兼容” IE10部分支持Flex(-ms-flexbox)、Web Socket,可被判定为“较易兼容” IE11部分支持Flex、WebGL,可被判定为“较易兼容” IE6、7、8、9可视为“老式浏览器” IE10、11可视为“准现代浏览器” Chrome、Firefox、Safa 阅读详情

相关推荐

lift off工艺为什么常用蒸发的方式镀膜?

电子束蒸发中,蒸发物质从源头直接升华并沿直线路径沉积到晶圆上,它可以避免金属在掩模侧壁的覆盖,只在表面进行沉积。在镀膜结束后,在进行光刻胶剥离时,去胶液无法与光刻胶接触反应,导致光刻胶剥离很困难。欢迎加入我的半导体制造知识星球社区,目前社区有1900人左右。我观察到晶圆厂中lift off工艺,镀膜都是用的电子束蒸发的方式,很少有用磁控溅射的方式,为什么?需要增加撕胶工序,将胶面上覆盖的膜层撕掉,使光刻胶露出,这样才容易剥离。上图为磁控溅射的膜层截面图,去胶液很难突破侧壁膜层,进行反应。

1684

非IE浏览器下ActiveX技术的替代方案

ActiveX是我们在做Web开发使经常使用的浏览器端技术,通过ActiveX控件,Web页面可以实现与计算机本地资源交互,实现特定功能。但实际上ActiveX控件技术是微软自家独有的Web页面扩展技术,它并不包含在W3C制定的HTML标准里面,所以也只有IE或使用IE内核的浏览器才支持它。。究其原因,ActiveX本质上是与Web应用的设计初衷相违背的,它模糊了客户端与服务端的边界,带来安全性、稳定性、兼容性和执行效率等问题。这也是IE在主流浏览器性能排名中总是排在后面的重要原因。但没有办法,由于Win.

weixin_45303938的博客 8768

从临床试验到互联网AB测试:边缘结构模型(MSM)如何解决‘时依性混杂’这个老大难问题

本文探讨边缘结构模型(MSM)如何解决时依性混杂问题,适用于临床试验和互联网AB测试。通过逆概率加权(IPTW)等方法,MSM能有效剥离混杂效应,准确评估长期干预效果。文章结合跨领域案例,详细解析MSM的核心原理、实施步骤及在推荐算法效果评估中的实战应用,帮助读者掌握这一先进因果推断工具。

weixin_28725949的博客 206

ajax基础(参考比内容更重要...)

关于ajax的一些总结(面试可能会使用的到)     参考:         http://www.ruanyifeng.com/blog/2016/04/cors.html         https://segmentfault.com/a/1190000012469713         http://mp.weixin.qq.com/s/H2znDNNIVWC5o5i0bp1rhg

jasonjkj的博客 543

ESP32-S3打造离线语音助手:从零部署自定义唤醒词与本地大模型推理【实战指南】

本文详细介绍了如何利用ESP32-S3芯片打造离线语音助手,包括自定义唤醒词训练与本地大模型推理的实战指南。通过硬件架构解析、音频处理优化及性能调优技巧,实现低延迟、高隐私保护的语音交互方案,特别适合智能家居和物联网应用。

weixin_30296405的博客 603

Xshell 连接 kali 虚拟机教程

启动ssh服务,启动后重新查看ssh服务状态,如下图active(running)正常。至此便可以直接使用Xshell登录kali系统了。至此虚拟机已经可以上网。-查看ssh服务状态。

qq_40726937的博客 2219

浏览器兼容性改造之Core Document

1、问题描述     IE是第一个原生支持XML的浏览器,而这一支持是通过ActiveX对象实现的。为了便于桌面应用程序开发人员处理XML,微软创建了MSXML库;但微软并没有针对JavaScript创建不同的对象,而只是让Web开发人员能够通过浏览器访问相同的对象。因此在IE中要创建一个XML文档实例,也要使用ActiveXObject构造函数并为其传入一个表示XML文档版本的字符串。共有6种

释然 2152

项目经理面试 5 大高频题 + 实战回答模板,帮你稳拿 offer

项目经理面试5大高频问题及应答技巧 摘要:本文总结了项目经理岗位常见的5个面试问题及回答策略,帮助求职者更有针对性地准备面试。核心问题包括:1)描述负责过的典型项目;2)常用项目管理工具;3)项目遇到的挑战及解决方案;4)风险管理方法;5)项目成功标准。每个问题都从面试官考察重点、回答技巧、实战案例三个维度进行分析,强调要用STAR法则(情境-任务-行动-结果)结构化表达,突出解决问题的能力而非简单罗列经历。特别提醒要量化项目成果(如提前2周上线、节省8%预算等),并注意展示商业思维和团队协作能力。

逸尘谈PM 2105

Chrome 91版本无法携带cookies问题

chrome自80版本 开始推进禁用第三方cookie,当时的解决办法参考:chrome80版本禁用cookie,但是最近更新到91版本发现chrome貌似强制禁用第三方cookie了,这就导致开发的时候,使用cookie的项目,访问不同域没有办法携带cookie,各种查找暂时解决办法: 1、参考链接; 2、如果是vue-cli3项目,可以在vue.config.js中添加代理到本地; devServer: { proxy: { '/api': { targe

梅花屋 1087

图像特征(一)——颜色特征(颜色直方图,颜色矩,颜色集,颜色聚合向量和颜色相关图)

本文主要是为了更好地理解图像特征,理解各方法的原理。转载请注明出处https://mp.youkuaiyun.com/console/editor/html/105090183 图像模式识别的一般步骤为:输入图像--图像预处理--特征提取--特征选择--图像分类--输出结果。 图像特征主要有:颜色特征、形状特征、纹理特征和空间关系特征。 本文主要介绍颜色特征,并给出matlab上实现的demo。 颜...

gloria_iris的博客 3万+

【第33话:车辆控制】自动驾驶车辆运动学模型推导及详解

自动驾驶车辆的运动学模型以自行车模型为核心,通过状态方程。

一碗白开水一 830

在ie与火狐的兼容性

1.在火狐下 document.getElementById("id").textContent可以获取当前获取id下的内容 而在ie下则为:document.getElementById("id").innerText JS在IE和Firefox兼容性问题汇编 以下以IE代替InternetExplorer,以MF代替MozzilaFirefox 1.docum...

aidan4963的博客 179

ProgLoss+STAL 技术详解:YOLO26 小目标检测增强方案

本文提出了一种基于ProgLoss渐进式损失函数和STAL小目标感知标签分配的YOLO26增强方案。针对小目标检测中特征信息少、正负样本不平衡等难题,STAL通过尺度感知的标签分配策略动态调整候选样本数量和IoU阈值,为小目标分配更多正样本;ProgLoss则根据训练阶段动态调整分类和回归损失的权重,早期侧重定位能力,后期加强分类精度。实验表明,该组合方案显著提升了小目标检测性能,在COCO数据集上小目标AP达到38.2%,比基线提升6.5个百分点。该方法为遥感、监控等场景的小目标检测提供了有效解决方案。

一键难忘的博客 1283

从IE到现代浏览器:lottie-web跨浏览器兼容性完全解决方案

你是否曾遇到过精心制作的Lottie动画在某些浏览器上无法播放,或者出现错位、卡顿等问题?特别是当需要支持从IE到现代浏览器的全范围覆盖时,兼容性问题常常让开发者头疼不已。本文将系统介绍lottie-web的跨浏览器兼容性解决方案,帮助你轻松应对各种浏览器环境,确保动画效果在所有目标平台上完美呈现。读完本文,你将了解lottie-web的浏览器支持范围、常见兼容性问题及解决方案、渲染引擎选择策略以...

gitblog_00214的博客 487

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

placeholder在IE8中兼容性问题解决

placeholder在IE8中兼容性问题解决

xuan2717的博客 131

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

windows phone和android,ios的touch事件兼容

   1.开发背景   最近用html5写了个小游戏,中间踩过无数坑,有很多甚至百度都百度不到答案,可见html5还真是不成熟,兼容性的复杂度比ie6有过之而无不及,性能那个渣简直无力吐槽。。   好了,吐槽结束,虽然有这么多的缺点,但是由于其良好的跨平台前景以及极低的学习成本,再加上优秀的框架,我最终还是选择了用html5来开发这个小游戏,而且是小游戏,所以就没有用什么游戏开发框架了...

weixin_30265171的博客 228

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jQuery-Cookie 跨平台测试:使用 BrowserStack 确保兼容性

你是否曾遇到过 Cookie 在 Chrome 中正常工作,却在 IE 浏览器中失效的情况?是否因用户反馈 "网站记住不了我的登录状态" 而排查数小时?本文将通过 jQuery-Cookie 插件的实际测试案例,展示如何使用 BrowserStack 实现跨浏览器兼容性测试,让你轻松解决 90% 的 Cookie 兼容性问题。读完本文你将掌握:测试环境搭建、自动化测试脚本编写、20+ 浏览器并行测...

gitblog_01161的博客 1071

跨平台场景下Java如何处理大文件上传的版本兼容问题?

支持上传文件夹并保留层级结构,同样支持进度信息离线保存,刷新页面,关闭页面,重启系统不丢失上传进度。本方案完全满足贵司技术需求且符合预算限制,建议进一步进行技术细节沟通和商务洽谈。文件下载支持离线保存进度信息,刷新页面,关闭页面,重启系统均不会丢失进度信息。支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传。up6/upload/年/月/日/guid/filename。支持下载文件夹,并保留层级结构,不打包,不占用服务器资源。NOSQL示例不需要任何配置,可以直接访问测试。

2501_90646763的博客 703

Javascript的IE和Firefox兼容性汇编[转载]

Javascript的IE和Firefox兼容性汇编    

.NET博文收藏 299

Satellizer跨平台测试:BrowserStack自动化兼容性验证

Satellizer作为基于AngularJS的Token认证模块,需要在多浏览器环境中保证稳定运行。本文将通过BrowserStack实现跨平台兼容性验证,解决OAuth认证在不同浏览器中表现不一致的问题。完成后可掌握自动化测试流程,确保Google、Facebook等第三方登录功能在95%以上设备中正常工作。 ## 测试环境配置 ### 项目结构解析 Satellizer提供了完整的前后端...

gitblog_00735的博客 445

前端开发中,大文件分片上传如何支持跨平台兼容?

当前方案已通过等保2.0三级测评,在某部委项目中稳定运行超过18个月,单文件最大支持50GB传输,吞吐量达300Mbps(千兆网络环境下)。接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表。支持上传文件夹并保留层级结构,同样支持进度信息离线保存,刷新页面,关闭页面,重启系统不丢失上传进度。文件下载支持离线保存进度信息,刷新页面,关闭页面,重启系统均不会丢失进度信息。支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传。

weixin_52050572的博客 694

JS在firefox和IE下差异及解决方案

1.document.formName.item(itemName) 问题说明:IE下,可以使用document.formName.item(itemName)或document.formName.elements[elementName];Firefox下,只能使用document.formName.elements[elementName].解决方法:统一使用docum

边沙村人的专栏 333

浏览器兼容小知识

浏览器兼容问题 浏览器兼容问题 屏幕分辨率兼容问题 跨平台兼容问题 1.不同浏览器默认标签的padding与margin不一致 选中标签统一重写样式 引入Normalize.css 2.图片存在默认间距 使用浮动float 3.清除浮动float .clearfix:after{ content:'.'; display:block; height:0; clear:both; visibility:hidden; } 4.链接访问过后ho

weixin_41784462的博客 245

常见几种浏览器兼容性问题与解决方案

常见几种浏览器兼容性问题与解决方案

asdfgh0077的博客 195
上一篇: 简单选择器的使用
下一篇: JAVASCRIPT面向对象(基础知识)第一章
codetofuture
博客等级 码龄12年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值