总结最近在项目中遇到的一些坑以及解决方案

这是我参与更文挑战的第10天,活动详情查看: 更文挑战

写在前面

在开发项目的时候,我们经常会遇到一些坑,可能是js的,也有可能是css的,或者是浏览器的兼容问题等等,当时我们可能找资料解决了,但是没有记录下来,下次遇到的时候就忘记了,这次,我想把这些遇到的坑以及解决方案总结成文章,下次遇到就能快速定位,也分享给各位掘友,一起进步。

精度问题

因为js是有最大的安全整数, 值是Math.pow(2, 53) - 1, 也可以用Number.MAX_SAFE_INTEGER表示

image.png

如果超过这个值,js不能保证你拿到的值等于这个值,所以是不安全的

image.png

但是我们后台返回的游客id就超出了这个范围,导致我拿到的跟原来的值是不相同的,思索良久之后, 网络也找了很多方法,最后让后端返回的游客id改成字符串类型,字符串没有最大安全整数之说,如下

image.png

网上也有人说可以使用bigInt,第三方库json-bigint,但是我看到的demo之后,它要求你输入的对象就是得字符串化的,你可以看到我截图的是用引号引起来的字符串,并不适用我们后端的返回

image.png

总结:所以这个方案对我们这边不适用,我们选择的是让后端把字段改成字符串类型

ios的margin-bottom 失效问题

最近的项目中,需要对body的底部撑开大概50px的高度,于是很熟练的用了margin-bottom: 50px,安卓一看没问题,但是在ios中发现撑不开,没有效果

image.png

最后通过google,找到了2种解决问题的方法

  1. 使用padding-bottom代替
  2. 底部加个高和撑开高度是一样的空白div来撑开

总结: 2个方式都可以,我一般选择第一种

数字过长,ios可能会识别成手机号码

项目中后端返回的数字位数过大,ios默认会识别成电话号码,点击后弹出拨打按钮,这种行为是我们不希望的,如果我们想要禁止这种行为,我们可以在html的head标签里面加上这句

<meta name="format-detection"content="telephone=no">
复制代码

即可取消ios自动识别电话号码

ios webview post请求参数缺失问题

之前开发个页面,测试没问题,然后正常上线了。过了一段时间,有用户反馈,说ios页面有时候会提示参数缺失,看的这个问题,我看了用户的几个反馈,好像都是ios设备,那就是说安卓暂时没问题,于是我就问ios客户端有做了什么升级吗,客户端说把UIWebView升级成WKWebView,原来如此,看来是升级后会导致这个问题。
谷歌了发现,网上有人解释是WKWebView的网络请求和APP不是同一个进程,是app进程通过ipc通信通知网络进程进行http请求,但是如果由于系统调度,post请求体有可能会把参数丢弃,导致参数缺失。

解决方案我这边采用2种:

  1. 把post请求改成get请求,get请求的参数是带在链接中,没有这个问题。
  2. 客户端封装http请求方法,前端通过js-bridge去通知客户端发送,避免ipc通信,这样就可以使用post请求。

总结: 2种方法都可以,推荐第二种,方便灵活,不像第一种受到限制,只能get请求

ios日期问题

有个项目后端返回日期字符串比如2021-06-01,前端需要转成时间戳,于是就使用

+new Date(`2021-06-01`) 
复制代码

安卓没问题,在ios上直接提示invalid value,好家伙

image.png

不,我不能走,我要解决它!!!

于是我又用谷歌搜索一番,才发现ios并不支持这种-连字符日期,它支持/连字符

+new Date(`2021/06/01`) 
复制代码

成功了,耶耶耶!!!!

image.png

总结一下ios支持以下格式:

yyyy/MM/dd
MM/dd/yyyy
MMMM dd, yyyy
MMM dd, yyyy
复制代码

任君选择,我推荐第一种或者第二种。

结束语

以上就是最近遇到的一些坑以及它的解决方案,希望你们看到能对你们有帮助,谢谢~

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享