引言
最近一直参与公司开发公众号,关于项目实施平台PC端简化为微信公众号,主要架构为前台H5,使用时的微信的WeUI的SDK,后台就是现在流行的SpringMVC+Mybaties,参与了全程开发,开发过程中也遇到了不少的问题,现在记录下来,希望以后能够用得到。
HTML页面之间传值
JSP之间传值已经很熟悉,HTML之间传值是通过解析URL获取所需参数。
| 12
 
 | URL + "?logId=" + logId;
 
 | 
| 12
 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
 
 | var hrefInfo = getUrlVars(window.location.href);
 if (hrefInfo.logId && hrefInfo.logId != "undefined") {
 fillData(hrefInfo.logId);
 logId = hrefInfo.logId;
 } else {
 
 }
 
 
 function getUrlVars(hrf) {
 
 var vars = [], hash;
 var locationHref = !hrf ? window.location.href : hrf;
 locationHref = locationHref.replace(/#/g, "");
 
 if (locationHref.indexOf('%') > 0) {
 locationHref = unescape(locationHref);
 }
 
 var hashes = locationHref.slice(locationHref.indexOf('?') + 1).split('&');
 for ( var i = 0; i < hashes.length; i++) {
 hash = hashes[i].split('=');
 vars.push(hash[0]);
 vars[hash[0]] = hash[1];
 }
 return vars;
 }
 
 | 
JS、JQuery获取各种屏幕的高度和宽度
在移动端经常会用到获取屏幕的高度和宽度,在这里总结一下。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | Javascript:document.body.clientWidth
 document.body.clientHeight
 document.body.offsetWidth (包括边线的宽)
 document.body.offsetHeight (包括边线的高)
 document.body.scrollWidth
 document.body.scrollHeight
 document.body.scrollTop
 document.body.scrollLeft
 window.screenTop
 window.screen.width
 window.screen.availHeight
 window.screen.availWidth
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | JQuery:$(document).ready(function(){
 alert($(window).height());
 alert($(document).height());
 alert($(document.body).height());
 alert($(document.body).outerHeight(true));
 
 alert($(window).width());
 alert($(document).width());
 alert($(document.body).width());
 alert($(document.body).outerWidth(true));
 })
 
 | 
微信浏览器缓存清理
微信浏览器缓存一直都是相当恶心的存在,只要页面加载,那么静态页面就会被缓存,通过Google和百度找到了以下两种方法:
设置HTTP头部
通过这只HTTP头部禁止浏览器缓存,效果没有达到要求,不建议使用
Android下可在微信中打开http://debugx5.qq.com清除微信缓存。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | <html manifest="IGNORE.manifest">
 
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta name="viewport"
 content="width=device-width, initial-scale=1, user-scalable=no">
 <link rel="shortcut icon" href="../../view/images/favicon.ico"
 type="image/x-icon" />
 
 | 
更新版本号
HTTP头部禁止缓存不能用,就只能每次都更新版本号(加随机数)来达到自己的要求了。
使用SeaJs拦截所有.js和.css并在尾部加上随机数。
引入SeaJs
| 1
 | <script src="../../util/sea.js"></script>
 | 
配置seajs_config.js
需要配置seajs_config.js全局变量,每一个HTML页面都要引入,关于更多SeaJs配置http://yslove.net/seajs/
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | var time = new Date().getTime();var sea_config = {
 "base":"/",
 "debug":"true",
 "charset":"utf-8",
 preload: ["util/jquery-1.8.0.min.js"],
 map: [
 ['.js','.js?version=' + time],
 ['.css','.css?version=' + time]
 ]
 };
 
 | 
| 12
 3
 4
 5
 
 | //HTML页面引入<script src="../../config/seaConfig/seajs_config.js"></script>
 <script>
 seajs.config(sea_config);
 </script>
 
 | 
Ajax请求缓存
在编码期间,因为有个角色是查看所有项目且数据量也比较大,所以把Ajax请求方式从POST改为了GET,结果就发现Ajax请求被缓存,只有第一次查询有效,其后全部是从缓存中取,查询资料后才发现是POST改为GET引起的
解决方法一
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | $.ajax({
 type: 'get',
 url: '........',
 cache: false,
 data: { },
 success: function (result) {
 
 }
 });
 
 | 
解决方法二
| 12
 3
 4
 
 | 访问就在URL后面加上[总之就是使每次访问的URL字符串不一样的]URL?+new Date();
 设计WEB页面的时候 也应该遵守这个原则
 因为请求同一个地址会直接读取缓存,所以可以在参数中加一个随机数数 让每次参数不一样就好
 
 | 
IOS下Iframe滚动问题
移动端在IOS下的问题居多,后来测试组测出的bug多数属于在IOS下属性不兼容问题,其中就有IOS下Iframe里面页面无法滚动,解决方法如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | <!DOCTYPE html><html lang="zh-cn">
 <head>
 <meta charset="utf-8" />
 <title>IOS frame 滚动条 demo</title>
 </head>
 <body>
 <style>
 #wrapper{height:500px;-webkit-overflow-scrolling:touch;overflow:auto;}
 </style>
 <div class="container">
 我是一堆很长。很长,很高,很高的内容。
 </div>
 <script src="../jquery.js"></script>
 <script>
 var UA = navigator.userAgent;
 var forIOS = function(){
 if(!UA.match(/iPad/) && !UA.match(/iPhone/) && !UA.match(/iPod/)){
 return;
 }
 if($('#wrapper').length){return;}
 $('body').children().not('script').wrapAll('<div id="wrapper"></div>');
 }();
 </script>
 </body>
 </html>
 
 | 
总结
这次是我第一次开发微信端,从前端的不熟悉到熟练,自己成长了许多。同时遇到了很多问题,尤其是在IOS下的兼容问题,比如还有像IOS下fixed属性不能用等问题。很多东西只有自己摸索才知道,这次也算是让自己在全栈工程师的道路上又进了一步。