前端碰到的兼容性问题总结
IOS new Date()参数参数带时分秒不兼容问题
问题:
上面这段代码是获取当前日期,这段代码在Firefox、Chrome、Safari浏览器中都可以运行。但是如果我想根据字符串获取日期,问题就来了。看下面代码。
1
| var date =new Date("2020-05-31 08:00:00");
|
这段代码是获得字符中指定的日期,它Firefox、Chrome中就能运行,但是放在Safari就会报错,错误是NaN,意思是Not a Number。就是因为这个错,苹果手机不能正常运行开发的这个界面。
但是如果不带时分秒就可以
1
| var date =new Date("2020-05-31");
|
解决方案:
在网上找了一下,将代码这样写就好了,年月日尽量以斜杠隔开,如果非要以横杠隔开,就不能带时分秒:
1
| var date =new Date("2020/05/31 08:00:00");
|
或者对时间数据处理一下,也可以:
1
| startTime = startDiffTime.replace(/\-/g, "/");
|
问题描述:
- 安卓获得焦点时键盘遮挡输入
- ios失去焦点后底部空白,页面无法归位
解决方案:
通过点击事件强制操作dom
directives.js(这里是封装在vue指令里面的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| import tools from '@utils/tools';
function directives(Vue) { Vue.directive('compatible', (el, binding) => { el.onfocus = () => { if (tools.isAndroid()) { window.addEventListener('resize', function() { if(document.activeElement.tagName=='INPUT' || document.activeElement.tagName=='TEXTAREA') { window.setTimeout(function() { document.activeElement.scrollIntoViewIfNeeded(); },0); } }); } }; el.onblur = () => { if (!tools.isAndroid()) { setTimeout(() => { const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0; window.scrollTo(0, Math.max(scrollHeight - 1, 0)); }, 100); } }; }); }
export default directives;
|
utils/tools.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Utils{ constructor(){}
isAndroid() { let u = navigator.userAgent; let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; return isAndroid === true; }
isIos() { let u = navigator.userAgent; let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); return isiOS === true; } } export default new Utils()
|