最近做一个微信公众平台的一个订购网页,产生了好多问题,下面是问题与解决方法,欢迎指正学习。
1.如何只让网页在微信打开,其他浏览器拒绝访问?
因为是个订购网页,所以会牵扯恶意用户通过其他途径注册,购买,造成不必要的麻烦。
其他有一种常用的解决方法,那就是使用post提交方式,这样就保证了数据的安全性。可是也是存在一些弊端的,比如,外部还是可以查看网页界面的,如果我不想让通过其他途径看到界面呢,这样保证了数据的绝对安全。
大家都是到微信用的是x5的内核,既然是微信,这么大一个东西,肯定有与众不同的地方,经过百度查阅,我是用这个方法解决的,(原理就是判断其中某一个标志性的东西,判断他的访问来源,从而判断是不是通过微信访问的,博主走马观花,也就会用)
var useragent = navigator.userAgent;
if (useragent.match(/MicroMessenger/i) != 'MicroMessenger') {
//不是通过微信访问的
}else{
//执行正常,通过微信访问
}
这样就轻松解决了,安全问题,我的做法是,这网页的head头部里面直接进行判断,如果不是微信,那么直接跳转错误界面。
2. 跨页面数据传输
这个其实已经不是微信开发特有的,当然也是个大问题,我就说说。
1.form表单提交,这个单价一般都会用。method : get/post
2.window.location.href?name=’ys’;
这个有点类似于get方法,优点就是可控制性强,可以随时进行跳转。某些情况下挺有用的,比如:
ok执行代码,error执行代码,可以随意判断跳转页面。
3.利用ajax进行传输
如何实现,可以查看 原生实现ajax;
当然这个方法和后天进行数据交互用的较多。
4.利用cookie存数据
//arg1 名字, arg2 值, arg3过期时间
function setCookie(objName,objValue,objHours){ //添加cookie
var str = objName + "=" + escape(objValue);
if(objHours > 0){ //为0时不设定过期时间,浏览器关闭时cookie自动消失
var date = new Date();
var ms = objHours*1000;
date.setTime(date.getTime() + ms);
str += "; expires=" + date.toGMTString();
}
document.cookie = str;
}
//清除cookie
function clearCookie(objName){
var arrStr = document.cookie.split("; ");
for(var i = 0;i < arrStr.length;i ++){
var temp = arrStr[i].split("=");
var date = new Date();
var ms = -100*1000; //过期时间为100s以前,
date.setTime(date.getTime() + ms);
document.cookie = temp[0] + "= ''; expires=" + date.toGMTString();;
}
}
//根据名字获得cookie值
function getCookie(objName){
//从cookie变量中获取指定的值
var arrStr = document.cookie.split("; ");
for(var i = 0;i < arrStr.length;i ++){
var temp = arrStr[i].split("=");
if(objName == temp[0]){
return unescape(temp[1]);
}
}
}
在代码中,我设置过期时间为100s前,在夸页面以后,由于立马设置了他的过期时间,所以导致他的数据就失效了,所以跨页面之后,我们要先保存cookie数据,然后就清除cookie,这样可以防止有些用户按返回键,cookie存留,造成数据冲突的bug。
目前就这么些问题,有了问题在更新吧……