第一次做H5的项目,遇到不少问题和注意事项,特意记录下来
1. 用户交互的接口中,后端除了返回0,其他错误信息需要抛出展示给用户
2. 项目要求页面的title不要显示url,只需要一个空白
觉得很简单,设置一个空字符串,document.title = ""不就行了,发现在iphone上可以,android上不行,还是显示url。然后在chrome上做测试,发现空格document.title = " "也不行,document.title = " "也不行。只好上网找到办法document.title = '\u200E';就可以了。
3. 背景图片固定,不随上层元素滑动
4. 自己实现了一个modal框
5. 移动端点击页面中的input输入框,弹出键盘,输入完毕,关闭键盘后,页面不回弹
在移动端的文本框中输入内容,收起键盘后,发现iPhone手机出现页面布局不下滑的问题,而安卓手机是正常的。
解决方案是,当文本框失去焦点后让 window
重新滚动到(0,0)
到位置:
const inputItems = document.querySelectorAll("input");
inputItems.forEach(function(ele){
ele.addEventListener("blur",function(){
window.scrollTo(0,0)
})
})
6. 移动端,点击输入框,背景图片上移
H5页面设置了背景图片,在移动端,点击input,弹出键盘的时候,背景图片被挤上去了。
.main{
height: 100%;
background: url('../assets/images/[email protected]') no-repeat left top;
background-size: 100% 100%;
}
在设置背景图片的时候,高度设置成了100%,这样写就会导致键盘弹出的main的height:100%会变成(100%-键盘高度),导致图片被挤压,所以需要强行将main的高度设置为html原本的100%。
mounted(){
this.bodyHeight=document.documentElement.clientHeight
}
这样的话即使键盘弹起main的高度还是之前的100%,背景图片也就不会被挤上去了
7. ...省略号效果的实现
之前是用js代码控制字符串的长度,来做截断,这次试了一下css实现,也不错
今天是2019年7月26日
8. 修改input的placeholder的颜色
input::-webkit-input-placeholder { /* WebKit browsers */
color:rgba(181,181,181,1);
}
input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
color:rgba(181,181,181,1);
}
input::-moz-placeholder { /* Mozilla Firefox 19+ */
color:rgba(181,181,181,1);
}
input:-ms-input-placeholder { /* Internet Explorer 10+ */
color:rgba(181,181,181,1);
}
9. iphone出行页面滑动卡顿
H5页面在安卓设备上滑动的时候很正常,很流畅,但是在iPhone中滚动速度很慢,感觉不流畅,有种卡卡的感觉。上午找了解决方案,很简单,一行代码搞定
body {-webkit-overflow-scrolling: touch;}
10. 移动端如何看console.log
H5页面开发的时候,可以用chrome模拟手机分辨率,调试各种错误非常方便。一旦上真机测试出现各种问题,就束手无策了。上网找了两个H5页面移动端的调试工具eruda和vConsole,只要在index.html中引入js库就可以了,非常方便。H5页面的右下角会出现一个按钮,点击就会弹出调试界面,可以看log和network,还有其他各种信息。虽然不及chrome强大,但总比没有强多了
eruda:
vConsole:
11. ios10手机的打不开H5页面
控制台出现错误提示SyntaxError: Cannot declare a let variable twice: 'e'.,以为是自己代码的问题,查遍了整个工程也没找到重复定义2次的变量e。后来同事上网查到解决方案,这是iphone的一个bug。通过修改UglifyPlugin的定义,添加关于mangle的选项即可。(注意:修改完之后最好清除微信缓存,浏览器缓存,app缓存再测试)
optimization: {
minimizer: [
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
},
mangle: {
safari10: true
}
},
sourceMap: true,
parallel: true
}),
],
},
具体参考这个链接
https://segmentfault.com/a/1190000013075464?utm_medium=referral&utm_source=tuicool
12. 有些老的安卓手机和PC端微信内置浏览器打不开H5页面
用了Vconsole,发现了问题,项目虽然配了babel,但是没用,代码没有转译成es5,低版本的浏览器都不支持es6的写法,坑
13. 在app内打开H5页面,实现点击app的左上角的返回按钮退出H5页面:
14. 请求后端接口的时候,token不能传undefined字符串