前言

作为一名菜鸡前端,我经常被safari的浏览器兼容性折磨,所以在此做一个曾解决过的兼容性问题总结,给日后不了解如何处理兼容性问题的前端同学提供一个思路。

低版本IOS Safari浏览器不兼容ES6语法

这是我首次跟safari浏览器打交道,在跟别的公司对接H5页面的时候发现的问题,他们的app最低可支持ios10的系统安装,他们的测试在用ios11.2的系统打开我们的H5页面时便出现了白屏,身边的同事也都没有用低版本的ios的,同时我也不知道页面报的是什么错误,此时一度陷入困境,在不清楚问题的情况下去解决报错,贸然更改代码与配置太过冒险,公司的电脑用的是Windows系统,安装虚拟机来还原低版本的ios环境或许是解决这个问题的方法。

先去黑苹果社区去下载一个macOs的镜像,这里我选择的版本是macOs11.1,虚拟机安装mac系统详情可见该篇文章VMWare15 安装 Mac OS系统(图文教程)
安装mac系统是为了使用Xcode,Xcode可以模拟ios的环境。mac环境都准备完毕后,进入Xcode设置里面的Preferences,选择Components,下载需要的ios版本。

运行对应的ios版本即可实现在Windows上打开ios设备(模拟),解决了没有低版本ios真机的痛点。

打开模拟器后发现低版本的ios系统的safari确实打不开H5页面,在项目的入口index.html文件中加入如下代码

<script type="text/javascript" src="//cdn.jsdelivr.net/npm/eruda"></script>
<script>eruda.init();</script>

引入一个小插件,可以实现在移动端设备上打开控制台。

打开控制台后问题终于水落石出,Unexpected token ‘…’. Expected a property name,ES6拓展语法导致的代码报错。

在项目中的.babelrc文件中加入如下配置

"presets": [["@babel/preset-env",{"useBuiltIns":"usage","corejs":{"version":"3","proposal":true},"targets":{"chrome":"60","safari":"10"}}],"@babel/preset-react"],
"plugins": ["@babel/plugin-transform-runtime",]

配置更改后重新编译发布,低版本ios设备可正常访问

至此,首个safari浏览器兼容性问题得以解决,整个过程的关键在于如何复现问题,发现报错。如果有低版本ios设备的同学可以绕过安装虚拟机macOs系统去使用Xcode模拟器,直接引入查看控制台的插件,即可看到报错。

Safari浏览器不支持YY-MM-DD hh:mm:ss时间格式

项目中做了一次时间格式调整,所有的时间需要带时分秒,调整完以后用户发现某款产品无法计算年龄,调整了项目中的代码,计算年龄的时候使用YY-MM-DD的格式,从而解决了这个问题。

Safari浏览器不支持正则的零宽断言

在项目中为了替换#{}的内容,使用了零宽断言,导致safari浏览器又双报错了,故换了一种正则匹配方式,下面是我变更后的代码,有兴趣的同学可以参考一下(我的正则写的烂,可以酌情吐槽一下)。

// 根据环境变量替换链接中的url
function transformUrl(url){/**正则表达式 */// const re = new RegExp('(?<=\#\{).*?(?=\})', 'g'); //匹配#{}里面的内容 零宽断言写法const re = new RegExp('\#\{(.*?)\}', 'g'); //匹配#{}里面的内容const tUrl = _.map([...new Set(url.match(re))], item => { // 去重return item.slice(2,-1) // 去除#{}})let nUrl = _.cloneDeep(url);_.forEach(tUrl, item => {if(window?.env?.[item]){// const reg = new RegExp(`(?<=\#\{)\(${item}\)\*\?(?=\})`, 'g'); //匹配#{}里面的内容 零宽断言写法// const exReg = new RegExp(`\#\{\(${window.env[item]}\)\*\?\}`, 'g'); // 匹配#{},目的去除#{} 零宽断言写法const reg = new RegExp(`\#\{(${item})\}`, 'g'); //匹配#{}里面的内容const exReg = new RegExp(`\#\{\(${window.env[item]}\)\*\?\}`, 'g'); // 匹配#{},目的去除#{}const replaceUrl = _.replace(nUrl, reg, window.env[item]);const newRepUrl = _.replace(replaceUrl, exReg, window.env[item]);nUrl = newRepUrl;}})return nUrl;
}

小结

兼容性问题不同于开发过程中遇到的bug,需要慢慢发现并消化,多方面的去思考解决方案,可以从配置或代码层面入手;作为一个前端开发,平时也不应当只以谷歌浏览器作为开发视角,也可以多关注一下其他的浏览器。最后推荐一个网站Can i use,用于查看各个浏览器的兼容性,祝各位前端同学都能妥善处理各种兼容性问题。

Safari浏览器兼容性问题处理相关推荐

  1. safari浏览器兼容性问题-日期格式

    今天写代码遇到的一个bug,在chrome上显示得好好的时间,一到Safari就提示 "invalid date",于是回来看代码(为了一目了然,进行一些处理): var dead ...

  2. safari浏览器的一些兼容性问题总结

    safari浏览器的一些兼容性问题总结 vue项目开发完毕之后在chrome.firfox等浏览器表现正常,但在safari浏览器中跳转首页时报错导致页面展示空白,报错信息提示是语法错误.猜测是saf ...

  3. 各大浏览器兼容性报告 IE、FF、Safari、OP不同浏览器兼容报告

    IE.FF.Safari.OP不同浏览器兼容报告 分类:UI前端設計2011-12-05 17:01323人阅读评论(0)收藏举报 IE.FF.Safari.OP不同浏览器兼容报告 1浏览器内核简介 ...

  4. 前端兼容性问题:快速去掉mac safari浏览器input右边的小图标/小按钮

    去掉mac safari浏览器input右边的小图标/小按钮 input:focus::-webkit-contacts-auto-fill-button{opacity: 0; } 复制代码 去掉S ...

  5. 介绍几款浏览器兼容性测试工具

    昨天和朋友聊到了有关浏览器兼容性的问题,在开发中有时的确很让人苦恼,我向他推荐了几款测试浏览器兼容的工具,分享给大伙,有什么更好的工具或是解决方法还希望大家拿出来晒一晒. IETester 这是我最先 ...

  6. 47种常见的浏览器兼容性问题大汇总

    浏览器兼容性问题大汇总 Ø JavaScript 3 1. HTML对象获取问题 3 2. const问题 3 3. event.x与event.y问题 3 4. window.location.hr ...

  7. 再谈浏览器兼容性测试

    今天跟大家聊一个老生常谈的话题:浏览器兼容性测试. 测试国内网站的同学是不是已经非常头疼了,因为面对的浏览器除了国际大牌如IE, Chrome, Firefox, Opera, Safari, 还有国 ...

  8. CSS实现跨浏览器兼容性的盒阴影效果

    2019独角兽企业重金招聘Python工程师标准>>> CSS实现跨浏览器兼容性的盒阴影效果 一.无关紧要碎碎念 在web页面的ui表现中,投影效果可以说是非常常见的一种表现效果了. ...

  9. 2015.7.13 第五课 课程重点(z-index、overflow、浏览器兼容性)

    1.z-index=数字 z轴的值,当几个div重叠时,z-index数字越大的,越在上面 2.overflow:hidden(超过部分隐藏)/auto(超过时出现滚动框)/scroll(一直有滚动条 ...

  10. javascript中new Date浏览器兼容性处理

    看下面的代码 <script type="text/javascript">var dt1 = new Date('2016-3-4 11:06:12');alert( ...

最新文章

  1. TCP/IP详解学习笔记(9)-TCP协议概述
  2. Java 学习内容总结
  3. Android - toolbar navigation 样式
  4. Linux部署Ant Design Pro项目及nginx部署
  5. vue prop不同数据类型(数组,对象..)设置默认值
  6. 巴塞尔大学合作项目博士招生,医学图像分析领域
  7. 让你“爱”上 GitHub,解决访问时图裂、加载慢的问题
  8. String、Object、包装类的常用方法以及注意点
  9. (转)高盛:老牌投行新生意,华尔街“谷歌”如何炼成?
  10. KendoUI和wijmoUI 它们的Grid比较 20120423
  11. 使用Spring Security实现权限管理
  12. 计算机cad比例尺1 150,CAD图纸里面 1:50 和:1:100和1:150三个比例分别怎么换算...
  13. 【WPS】中插入“公式”后行距不正常的解决办法
  14. 阿里云 vs Azure-大数据
  15. 如何修复计算机的无限功能,Win10系统自动修复时出现无限死循环或提示无法修复怎么办 如何禁用自动修复服务...
  16. Groovy语言的介绍
  17. 【啃书】《智能优化算法及其MATLAB实例》例6.1基本粒子群算法进行sphere函数寻优
  18. U-BOOT中文文档 概述与配置选项
  19. 堆排序 ← 改编自《啊哈!算法》
  20. 不用计算机算arctanx,arctanx等于什么(arctan计算器在线)

热门文章

  1. UltraISO/Nero/Daemon Tools
  2. 基于物联网的智能门锁应用系统架构设计及项目开发实践总结
  3. ArcGIS批量计算图层中矢量要素面积——ArcMap
  4. UDP中sendto()和recvfrom()两个函数的使用
  5. 仪器采集信号后用matlab分析,基于MATLAB的语音信号采集和分析系统的可视化设计...
  6. 【FPGA频率计】基于FPGA的高精度数字频率计的详细设计
  7. 计算机电源维护维修方法,电脑电源维修方法
  8. 计算机用户密码怎么查看,怎么查看电脑开机密码【具体阐明】
  9. 基于Web的教学网站前端开发设计 报告+任务书+html源码
  10. 用华为模拟器ENSP构造校园网(第二天)配置总网络拓扑DHCP中继