刚入门前端的时候写过不少的微信H5页面,时隔多年感受应该是手到擒来,未曾想竟非常费了一些功夫。如今把本次开发过程当中遇到的问题以及我是如何解决的,作个记录。防止本身之后再去解决解决过的问题。
github:github.com/qq9694526/v…javascript
网页受权流程分为四步,这里只说前端须要作的,其中的第一步:跳转受权页面获取code。 这里分享下个人受权逻辑(下图),它有两个优势:php
若是你页面中有用到分享、上传图片、微信支付等功能,那么须要先进行js-sdk受权。我这边封装成了2个方法:initConfig和setShare,方便在路由/页面切换的时候重复调用。css
//main.js
import wxsdk from './config/wxsdk.js' //该模块提供initConfig和setShare方法,具体代码太长见github
Vue.prototype.wxsdk = wxsdk;//挂载到全局
//使用
created() {
this.wxsdk.initConfig(location.href.split("#")[0], () => {
this.wxsdk.setShare(this.user.openId);
});
}
复制代码
讲真的全部跨域解决方案都必须有服务端的参与,诚然这个问题是浏览器抛出的,但让前端去解决真的很冤。下面两个配置让你永远告别跨域烦恼。本地开发用webpack-dev-server,测试生产环境用nginx。html
//接口根路径http://47.105.59.***:9090/zt-wx
//以vue-cli搭建的项目config举例 config/index.js
dev: {
proxyTable: {
'/zt-wx': {
target: 'http://47.105.59.***:9090', //目标接口域名
changeOrigin: true //是否跨域
}
},
}
//实际发起请求时的url
this.http.get(`/zt-wx/api/wx/info`).then(); //http是我本身对axios的再封装
//nginx代理配置
server {
location /zt-wx {
proxy_pass http://47.105.59.***:9090;
}
}
复制代码
问题现象: ios页面初次加载白屏,刷新后正常,但切换到其余页面再后退,又会白屏。
问题缘由:在ios机器上使用webview开发Vue项目时候,go history(-1),没法将body的高度拉掉,使得内容被遮住了。
解决办法:html,body都是100%,#app撑起了父元素的告诉,可是浏览器默认的滚动scroll并非#app,而是body,某些因素,形成返回history 后,没法复原(ios 的锅),为此,咱们将#app进行了绝对定位,并让它从新成为 scroll 的对象,从而解决问题。前端
#app {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: scroll;
-webkit-overflow-scrolling: touch;
}
复制代码
参考资料:blog.csdn.net/guxuehua/ar…vue
问题现象:ios微信路由到另外一个页面选择图片OK,但分享失效,刷新这个页面分享就正常了。
已累计尝试解决超过8小时,至今未果。
参考资料:www.zhihu.com/question/59…java
这个报错甚是诡异,由于前端和后端代码均没有“处理异常”这4个字。原本想甩锅给微信无论了的,但随后在作限制上传图片大小功能的时候阴差阳错的给解决了。
问题缘由:后端tomcat服务默认设置表单提交数据大小上限为2M,大于2M就会报错。
解决办法:后端大神把server.xml中maxPostSize的值改成-1后解决。
参考资料:blog.csdn.net/w1875690157…webpack
这个项目首页基本是由图片堆砌成的,一开始切出来的图(默认.png)压缩后在400k-1.3M之间。一开始还觉得PSD素材有问题。直到项目最后才闪回,想起图片格式的知识点,改导出成.jpg格式后压缩出来的图片基本控制在100K之内了。具体的.png.jpg这些图片格式的知识有兴趣的本身查。ios
讲道理小项目是不该该用vuex的,可是用着确实爽,即简单又省心省力。因为我老是忘记它的方法名,因此在这里贴下代码,方便之后随时cv。nginx
//config/store.js
const store = new Vuex.Store({
state: {
user: {}
},
mutations:{
updateUser(state, data){
state.user = data;
}
}
})
//在组件中使用
computed: {
user() {
return this.$store.state.user;
}
}
//在须要的时候更新数据
this.$store.commit("updateUser", user);
复制代码
问题缘由:引入的图片资源路径跨域形成的。
解决办法:我先是按照官方给的那个php的方案弄的,未能解决。最后舔着脸让后端大佬把图片资源目录挪到我web服务目录下给解决的。
//安装
npm install --save html2canvas
//引入
import html2canvas from "html2canvas";
//使用
const myPosterWrap = document.getElementById("posterWrap");
html2canvas(myPosterWrap).then(canvas => {
this.posterSrc = canvas.toDataURL("image/png");
this.uploadPosterImg(this.posterSrc);
});
复制代码
就是把不定宽图片按指定比例显示,直接上码(1:1.25)。
//html
<div class="poster-img-wrap">
<div class="poster-img-place"></div>
<img class="poster-img" :src="user.picAddress" alt="">
</div>
复制代码
//less
.poster-img-wrap {
position: absolute;
top: 28%;
left: 0;
right: 0;
width: 80%;
margin: 0 auto;
.poster-img-place {
width: 100%;
padding-top: 125%;
}
.poster-img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
复制代码
问题描述 :ios从首页进入,跳转其余页面再后退到首页,首页只显示一屏内容且没法滚动。 问题缘由:在于ios浏览器内核的别致渲染逻辑:它会预先找到相应的overflow: scroll元素,若是子元素高度高于父元素,则创建原生的scrollView实现滚动。问题就出如今这个“预先”上,它预先获取的高度并非子元素渲染后的真实高度。 解决办法:给设置了滚动的#app元素下的子元素p-index设置min-height: calc(100% + 1px);
#app {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: scroll;
-webkit-overflow-scrolling: touch;
}
.p-index{
min-height: calc(100% + 1px);
}
复制代码
其实能解决全靠这篇博文,这里就不赘述了。blog.csdn.net/nongweiyila…
神奇的是,我能看到这篇文章全来赖于地铁上无聊打开了好久没打开的CSDNapp,切到前端分类,“不滚动”三个字立马映入眼帘,点进去的第一眼 ,就感受是对的人了。迷茫的时候就看书,古人诚不我欺!
- 能小程序就别网页开发;
- 不意淫不揣摩待定的需求;
- 坚持看图做业的优良传统;
- 迷茫的时候就看书,焦虑的时候去学习;