因为有时候服务器负载,或者其他需求的原因,只可以从一个页面收发消息,这就导致 这个网站的新开页面无法及时得到消息,本文目的就是要实现同电脑同浏览器同域名间数据通讯
机制:H5特性localStorage和visibilitychange
解释:localStorage一直浏览器的寄存器,等同于数据库,有大小限制 3M~5M(够的),允许同域名下访问;visibilitychange这个其实不好解释,故擅自翻译为,网页可见性检测;
原理:A页面得到数据,将数据存放到localStorage,使用visibilitychange判断当用户切换到B页面后,从localStorage取值;
代码:
A页面储存数据(主要接受页面)
JavaScript
localStorage.setItem('MsgJson',JSON.stringify(obj));
B页面获取数据(被动接受页面)
JavaScript
//初始化激活代码
getlocalStorage();
visibi();
// 判断网页激活前缀
function browerKernel()
{
var result;
[ 'webkit', 'moz', 'o', 'ms' ].forEach(function (prefix)
{
if (typeof document[prefix + 'Hidden'] != 'undefined') {
result = prefix;
}
});
return result;
}
// 网页激活检测
function visibi()
{
prefix = browerKernel();
document.addEventListener(prefix + 'visibilitychange', function onVisibilityChange(e)
{
var tip = null;
if (document[prefix + 'VisibilityState'] == 'hidden') {
}
else if (document[prefix + 'VisibilityState'] == 'visible') {
getlocalStorage();
}
});
var initstatus = document[prefix + 'VisibilityState'];
}
function getlocalStorage(){
var msg = localStorage.getItem('MsgJson');
var obj = JSON.parse(msg);
/*其他方法*/
console.log(obj)
}
支持性判断
JavaScript
// 检测是否支持localStorage
if (window.sessionStorage) {
console.log('可以使用localStorage');
}
else {
console.log('不可以使用localStorage');
}
缺点:
1、如果A页面在非激活状态下得到数据,且B页面为激活状态,那么无法感知新数据(这就是伪通讯)
2、不宜存放大量数据,毕竟localStorage是有空间限制的