1、关于手机QQ浏览器和微信内置浏览器(默认理解微信内置浏览器就是qq浏览器)

(1)不兼容es6语法

  项目前台用的是vue,后台java,移动端。前期开发主要是在电脑上模拟手机看效果,一直也没啥问题,后来完成的差不多了就在手机看看效果,看看兼容性吧,结果,果然存在问题,

在手Q和微信进入页面之后没有内容,在其他浏览器显示正常,然后开始查资料,问前辈,才知道,vue中特别是钩子函数那块,自己大部分用的es6语法,而es6语法显然目前并没有被所有

浏览器兼容,而不幸的是手Q目前是没有兼容的,所以赶紧改语法,换成比较保险的语法格式,ok,页面完美显示。

(2)后台返回的数据格式,有时是object有时是string

  用vue做项目,取值,显示值非常方便,返回的基本上就是对象,然后就直接取值,做展示就好了,可是这次遇到的问题就更奇葩,在本地测试,所有浏览器都是ok的,然后上服务器,

在正式环境中做测试,又不幸的手Q和微信又有问题了,这两个根本不能登录,有时不停的操作,可能会登上去,但是这显然是不行的,所以又开始了不停找bug之旅,不停的测试,定位,终于发现,

在最初后台返回数据的时候,在正常浏览器和手Q浏览器得到的数据格式是不一样的,在正常浏览器得到的object,所以我可以直接通过“ . ”取数据,可是手Q浏览器得到的是string,那我肯定就不能在直接

“ . ”来得到数据了,所以根本登录不了。所以没办法,我只好在每一个返回数据的接口处,都先判断该数据是什么类型,如果是string则JSON.parse()方法,把string转化为object,这样就可以正常读取数据了。

  但是到现在,我还是没有想明白,为什么会有这样的情况,绝对是浏览器得问题吗,显然不是的,因为我在本地的时候,用任何浏览器都是可以的,为啥到了服务器之后,手Q的数据格式就变成string了呢?

真的不明白,但是我会继续研究的,后期如果知道再做更新。

2 、神奇的split()函数

  在项目中,客户需要有一个日历,通过选择任意一天,在页面上显示当周的周一和周日的日期,日历就找的插件做的,一般的插件就是点击一下得到当前选择的日期,我稍微对选择的日期做下处理,

在日历页面弹窗,点击确定的时候,有一个回调函数,在回调函数里,通过得到的当前日期,通过一系列处理(toLocaleDateString()),得到当周的周一和周日,但是此时我得到的日期格式为2017/7/1,而我们接口中用的格式为

2017-07-01,所以必须对日期格式进行转化,因为本人对正则表达式是只会用不会写,所以就开始找相关的正则,可是很不幸,没有找到,那没办法,就只能用笨办法了,手动的进行分割,再判断是否添加0吧,

问题就在这个时候发生了,因为我在电脑上看到的,得到的日期格式为2017/7/1,所以就直接按照“/”来处理,结果后来发现,手机和pc只能兼容一个,我又觉得不对劲了,难道split方法还存在兼容性,然后就在直接弹窗看数据到底什么样的,

果然,在pc和移动上得到的日期格式是不一样的,一种的2017/7/1,一种的2017-7-1,具体哪个是哪个我现在也忘了,但是不管那种格式,都是不能用的,我要的是2017-07-01,所以此时,我又通过神奇的网站,找的一个正则表达式

re =/^(20[01]\d|1\d{3}|[1-9]\d\d?|\d)\/([1-9]|1[0-2])\/(3[01]|[1-2]\d|\d)$/;

判断是否为 2017/7/1格式,如果2017/7/1格式,则split('/'),else  split('-'),好了也算经历了千辛万苦总算解决了

2(1):补充2,还是同一个问题,我想得到点击日期当周的周一和周日的时间,

var startT=data.year + '-' + data.month + '-' + data.day;(日历中选中的日期)
var oToday=new Date(startT);(用new Date方法初始化,得到下面的格式

)

var currentDay=oToday.getDay();(得到一周中的第几天)

(因为currentDay返回的值的顺序是周日---周六,0 --6;所以针对周日进行特殊判断,得到周一的毫秒数和周日的毫秒数)
if(currentDay==0){
var mondayTime=oToday.getTime()-6*24*60*60*1000;
var sundayTime=oToday.getTime();
}else{
var mondayTime=oToday.getTime()-(currentDay-1)*24*60*60*1000;
var sundayTime=oToday.getTime()+(7-currentDay)*24*60*60*1000;
}

得到周一和周日的毫秒数之后,再用new Date()方法进行初始化,并且用toLocaleDateString()将对象转化为字符串

var startTime=new Date(mondayTime).toLocaleDateString();(得到 2017-7-3格式)

var endTime=new Date(sundayTime).toLocaleDateString();

但是,后来测试发现.toLocaleDateString()的兼容性,在微信和手机百度得到的日期格式为2017-7-3,在其他浏览器上

得到的日期格式为,所以就没办法继续进行了,然后就改变方法,

var startTime=new Date(mondayTime);
var month= ( startTime.getMonth()+1).toString();
var year= startTime.getFullYear();
var day= ( startTime.getDate()).toString();
month.length>1 ? month : month="0"+month;
day.length>1 ? day : day ="0"+day;
inputTime=year+"-"+month+"-"+day;

分别得到startTime的,年、月、日再进行字符串的拼接,这样貌似可以了,但是,拿去ios测试,得到的竟然又是undefined,然后

new Date(startT);在ios上又不兼容,把startT去掉,就可以得到,于是把从插件里得到的值var startT=data.year + '-' + data.month + '-' + data.day;

的数据格式改为var startT=data.year + '/' + data.month + '/' + data.day;

现在才真正的可以,适应安卓,ios端。 

3、onfocus事件的触发

    还是在日历插件上,在好不容易完后  2 之后,我又发现一个悲伤的事情,这个日历在ios上触发一点点都不灵敏,我点10次,能弹出一次,已经算是很给面子了,这可怎么整,然后又开始查资料,查了半天没找到有用的信息,

我很好奇,难道这种奇葩的问题,真的只有我一个人遇到吗,突然灵光一现,反正都是要触发input,从而触发日历插件,那么ciick不也可以吗,果断更换,结果,真的可以呀,虽然都说click在移动端的会有300ms的延时,但是我总体测试,

点下来也没觉得啥,反正目前我还没找到比较好的解决方案,此路不通,再换一条咯。

  好了,这就是我最近遇到的比较奇葩的问题,以后如果再有,会继续写4、5、6的,这些bug在经历的时候,真的觉得很奇葩,但解决之后还是很有成就感的!嘻嘻

转载于:https://www.cnblogs.com/xumqfaith/p/7102752.html

那些不得不提的坑(持续添加中)相关推荐

  1. Android开发人员不得不收集的代码(持续更新中)(http://www.jianshu.com/p/72494773aace,原链接)

    Android开发人员不得不收集的代码(持续更新中) Blankj 关注 2016.07.31 04:22* 字数 370 阅读 102644评论 479喜欢 3033赞赏 14 utilcode D ...

  2. 前后端优秀团队(持续添加中。。。。)

    api 文档生成工具 http://ouapi.com/tool/md?w=undefined&a=1 分页 https://github.com/mricle/Mricode.Paginat ...

  3. 阿里开发10年大牛:Android开发人员不得不收集的代码(持续更新中)

    前言 1.软件吃掉世界,而机器学习正吃掉软件 在数据爆炸的时代,如何创建「智能系统」成为焦点.这些应用程序内所体现的智能技术,并非是将实用指令添加到代码中,而是可以让软件自己去识别真实世界中发生的事件 ...

  4. 一些开源代码网站介绍(持续添加中....)

    1.Netlib 网站:http://www.netlib.org/ 介绍:Netlib is a repository of software for scientific computing ma ...

  5. 好用的软件(持续添加中)

    1.文档比较 名称:Araxis Merge 备注:可以比较文件或文件夹批量比较 2.颜色拾取 名称:好色鬼 备注: 3.原型图设计 名称:Axure RP 备注: 4.配色方案 名称:ColorIm ...

  6. webpack1.x环境配置与打包基础【附带各种 “坑“ 与解决方案!持续更新中...】

    webpack1.x环境配置与打包基础[附带各种 "坑" 与解决方案!持续更新中...] 参考文章: (1)webpack1.x环境配置与打包基础[附带各种 "坑&quo ...

  7. 最好的Vue组件库之Vuetify的入坑指南(持续更新中)

    目录 安装Vuetify 文档结构 快速入门 特性 样式和动画 首先先声明,个人不是什么很牛逼的大佬,只是想向那些想入坑Vuetify的前端新手或者嫌文档太长不知如何入手的人提供一些浅显的建议而已,能 ...

  8. 【Vue全家桶+SSR+Koa2全栈开发】项目搭建过程 整合 学习目录(持续更新中)

    写在开头 大家好,这里是lionLoveVue,基础知识决定了编程思维,学如逆水行舟,不进则退.金三银四,为了面试也还在慢慢积累知识,Github上面可以直接查看所有前端知识点梳理,github传送门 ...

  9. 面试1:Java、微服务、架构常见面试题(持续更新中)

    Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...

  10. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

最新文章

  1. 出现adb连接不上的解决办法(转载)
  2. python控制结构是_Python之控制结构(if、while、for)
  3. python arcade库是干什么的-Python街机模块arcade的鼠标移动与单击示例
  4. 开源 | App 开发神仙工具:帮你抓 Bug
  5. linux virt java_Linux下Java环境安装
  6. 80-30-010-原理-React模式-简介
  7. PSD模版如何变成网页模版 (转载)
  8. [转]【eoeAndroid索引】史上最牛最全android开发知识汇总
  9. 国产高分系列卫星平台介绍
  10. 四旋翼无人机学习第5节--STM32最小系统外围电路分析
  11. Win10 重装系统 (iso方式)(超详细)
  12. Javascript是什么,能干什么、JavaScript的发展史、JavaScript的使用、方式一:内部引用、方式二:外部引用、程序设计的基础、数据类型与变量、运算符
  13. nodejs+vue 蛋糕甜品商城系统
  14. (附源码)ssm校园交流网站 毕业设计 261624
  15. 大学计算机基础报告总结,windows7实验报告总结.docx
  16. C Primer Plus 第3章 数据和C-编程练习
  17. matlab怎么提取小数部分,[转载]如何在Matlab中得到一个单、双精度数的整数部分和小数部分?...
  18. Go语言精进之路:绞尽脑汁,帮你理解方法本质并选择正确的receiver类型
  19. zephyr之i2C 和SCCB设备驱动
  20. 分享阿里P8前端架构师技能图谱

热门文章

  1. markdown编辑器------------编辑方法
  2. bootstrap模态框和select2合用时input无法获取焦点
  3. mysql数据库增删改操作不自动提交事务
  4. DevOps运维开发一体化
  5. .Net Email操作类
  6. C++11 enable_shared_from_this
  7. 正确的理解MySQL的MVCC及实现原理
  8. file* linux,Linux基础——file命令与magic file
  9. reids学习笔记汇总
  10. 剑指offer 06-从尾到头打印链表