如何使用Javascript计算一个会话中访问的总页面数
我想有一个脚本,将计数的网页数量,一个人在一次会议上点击我的网站,并可能记录每个网址以及。目的是在提交表单时,我希望填充表单的两个隐藏字段,一个是页面,另一个是会话期间访问的URL序列 最初,我想用cookie来实现这一点,在每一页上,读取并获取cookie的当前值,将其存储在变量中,删除cookie,然后用附加的变量重写cookie。我打算使用纯javascript 然后我遇到了HTML5会话存储,并认为这可能是一个很好的解决方案 这是我当前的代码,可以计算访问的页面数。我担心使用此方法记录URL可能会超过cookie的大小分配 有更好的办法吗?我应该看看HTML5存储吗 下面是我的工作代码。我对它进行了编码,以便在每个页面上查找ID为pageCount的表单元素,如果存在,则使用我的值填充它 我还计划使用经典ASP中的Request.Servervariables(“HTTP_X_ORIGINAL_URL”)来构建访问过的页面列表,并将这些页面存储在cookie或存储器中如何使用Javascript计算一个会话中访问的总页面数,javascript,html,cookies,session-storage,Javascript,Html,Cookies,Session Storage,我想有一个脚本,将计数的网页数量,一个人在一次会议上点击我的网站,并可能记录每个网址以及。目的是在提交表单时,我希望填充表单的两个隐藏字段,一个是页面,另一个是会话期间访问的URL序列 最初,我想用cookie来实现这一点,在每一页上,读取并获取cookie的当前值,将其存储在变量中,删除cookie,然后用附加的变量重写cookie。我打算使用纯javascript 然后我遇到了HTML5会话存储,并认为这可能是一个很好的解决方案 这是我当前的代码,可以计算访问的页面数。我担心使用此方法记录U
var page_count = (document.cookie.match(/^(?:.*;)?\s*pageCount\s*=\s*([^;]+)(?:.*)?$/)||[,null])[1];
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
var element = document.getElementById('pageCount');
if(page_count == null){
createCookie('pageCount','1',1);
if (typeof(element) != 'undefined' && element != null){
document.getElementById("pageCount").value = "1";
}
}else{
var x = parseInt(readCookie('pageCount')) + 1;
eraseCookie('pageCount');
createCookie('pageCount',x,1);
if (typeof(element) != 'undefined' && element != null){
document.getElementById("pageCount").value = x;
}
}
var page_count=(document.cookie.match(/^(?:.*)?\s*pageCount\s*=\s*([^;]+)(?:.*)$/)| |[,null])[1];
函数createCookie(名称、值、天数){
如果(天){
变量日期=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
var expires=“;expires=“+date.togmString();
}
else var expires=“”;
document.cookie=name+“=”+value+expires+“path=/”;
}
函数readCookie(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
好的,下面的示例演示如何使用javascript计算访问的页面数
链接到JSFIDLE
看一看,让我知道这是解决的目的
每次会话访问的
window.onload=函数(){
localStorage.setItem('count',parseInt(localStorage.getItem('count'),10)+1);
};
函数访问(){
警报(localStorage.getItem('count');
}
我很想使用会话存储来完成此任务,因为它可以存储比cookie更多的数据,而且您不必担心在任何阶段手动将其拆下,因为它只会保留在会话中
const hitcounter=function(){
const StoreFactory=function( name, type ){/* this would usually be in a separate js file */
'use strict';
const engine = !type || type.toLowerCase() === 'local' ? localStorage : sessionStorage;
const set=function( data ){
engine.setItem( name, JSON.stringify( data ) );
};
const get=function(){
return exists( name ) ? JSON.parse( engine.getItem( name ) ) : false;
};
const remove=function(){
engine.removeItem( name );
};
const exists=function(){
return engine.getItem( name )==null ? false : true;
};
const create=function(){
if( !exists() ) set( arguments[0] || {} );
};
return Object.freeze({
set,
get,
exists,
create,
remove
});
}
let oStore = new StoreFactory( 'urls', 'sessionStorage' );
oStore.create();
let data=oStore.get();
data[ location.href ]=data.hasOwnProperty( location.href ) ? parseInt( data[ location.href ] ) + 1 : 1;
data.total=data.hasOwnProperty('total') ? parseInt( data.total ) + 1 : 1;
oStore.set( data );
}
document.addEventListener( 'DOMContentLoaded', hitcounter );
显示存储数据的表单示例
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>sessionStorage: Maintain list of visited URLS</title>
<style>
span{color:green;display:block;clear:both;}
ul{color:blue}
</style>
<script>
const hitcounter=function(){
const StoreFactory=function( name, type ){/* this would usually be in a separate js file */
'use strict';
const engine = !type || type.toLowerCase() === 'local' ? localStorage : sessionStorage;
const set=function( data ){
engine.setItem( name, JSON.stringify( data ) );
};
const get=function(){
return exists( name ) ? JSON.parse( engine.getItem( name ) ) : false;
};
const remove=function(){
engine.removeItem( name );
};
const exists=function(){
return engine.getItem( name )==null ? false : true;
};
const create=function(){
if( !exists() ) set( arguments[0] || {} );
};
return Object.freeze({
set,
get,
exists,
create,
remove
});
};
const clickhandler=function(e){
oList.innerText = oSpan.innerText = '';
let json=oStore.get();
Object.keys( json ).map( key =>{
let li=document.createElement('li');
li.innerText=key+' '+json[ key ]
if( key!='total' ) oList.appendChild( li )
});
oSpan.innerText='The total is: '+json.total;
};
let oStore = new StoreFactory( 'urls', 'sessionStorage' );
oStore.create();
let data=oStore.get();
data[ location.href ]=data.hasOwnProperty( location.href ) ? parseInt( data[ location.href ] ) + 1 : 1;
data.total=data.hasOwnProperty('total') ? parseInt( data.total ) + 1 : 1;
oStore.set( data );
let oList=document.querySelector( 'form > ul' );
let oSpan=document.querySelector( 'form > span' );
let oBttn=document.querySelector( 'form > input[ type="button"]' );
oBttn.addEventListener('click', clickhandler )
}
document.addEventListener( 'DOMContentLoaded', hitcounter );
</script>
</head>
<body>
<form method='post'>
<ul></ul>
<span></span>
<input type='button' value='Load data' />
</form>
</body>
</html>
会话存储:维护已访问URL的列表
span{颜色:绿色;显示:块;清除:两者;}
ul{颜色:蓝色}
常量hitcounter=函数(){
const StoreFactory=function(name,type){/*这通常位于单独的js文件中*/
"严格使用",;
const engine=!type | | type.toLowerCase()==='local'?本地存储:会话存储;
常数集=函数(数据){
setItem(名称,JSON.stringify(数据));
};
const get=function(){
返回存在(名称)?JSON.parse(engine.getItem(名称)):false;
};
const remove=函数(){
发动机拆卸项目(名称);
};
const exists=函数(){
return engine.getItem(name)==null?false:true;
};
const create=函数(){
如果(!exists())集合(参数[0]| |{});
};
return Object.freeze({
设置
得到,
存在,
创造,,
去除
});
};
常量clickhandler=函数(e){
oList.innerText=oSpan.innerText='';
让json=oStore.get();
Object.keys(json.map)(key=>{
设li=document.createElement('li');
li.innerText=key+''+json[key]
if(key!=“total”)oList.appendChild(li)
});
oSpan.innerText='总数为:'+json.total;
};
让oStore=newstorefactory('url','sessionStorage');
create();
让data=oStore.get();
data[location.href]=data.hasOwnProperty(location.href)?parseInt(data[location.href])+1:1;
data.total=data.hasOwnProperty('total')?parseInt(data.total)+1:1;
oStore.set(数据);
让oList=document.querySelector('form>ul');
设oSpan=document.querySelector('form>span');
让oBttn=document.querySelector('form>input[type=“button”]”);
oBttn.addEventListener('click',clickhandler)
}
document.addEventListener('DOMContentLoaded',hitcounter);