天天看點

javascript 監聽器和定時器

這個例子是我要垮系統通路,防止目前會話失效,而還能通路另一個系統,而做得測試。

我将本Session過期的時間取到了頁面。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>合同起草</title>
</head>
<x:tbody title="xx" iconCls="icon-dot">
<div id="msgBox" style="display:none;"><font style="size: 14px;color: red"></font></div>
	<iframe id="logfrm" src="另一個系統位址"  frame scrolling="no">
	</iframe>
		
<script type="text/javascript">
	// 提示時間
	var infoTime = 180;// 3分鐘,到時預設提醒
	var unit = 1000;
	// session 過期時間,機關秒,從背景擷取的
	var sessionTime = "${sessionLostTime}"*unit; ;
	// 和session 同步,初始化定時任務
	var timeout = runTimeout();
	// 時間到了進行提示,從180秒時間減少
	var outinfo = runInteval();
	var noticeout;
	// 點選預設重新整理session 時間
	myWindowListener("click",function(){
		// 隐藏提示資訊
		$('#msgBox').hide();
		clearTimeout(timeout);
		clearTimeout(outinfo);
		clearInterval(noticeout);
		outinfo = runInteval();
		timeout = runTimeout();
	});
	// 執行定時器,session 過去動作
	function runTimeout(){
		return window.setTimeout(active,sessionTime);
	}
	// 執行定時器,消息提醒
	function runInteval(){
		return window.setTimeout(noticeout=notice,(sessionTime-infoTime*unit));
	}
	// 時間到了 直接跳轉登陸 界面
	function active(){
		forward('','/c/jsp/login/login');
	}

	// 時間即将到期 提示時間
	function notice(){
		$('#msgBox').show();
		return window.setInterval(infoAction,1000);
	}
	// 提示操作
	function infoAction(){
		infoTime --;
		$('#msgBox font').html("");
		$('#msgBox font').html("您長時間未操作,頁面将在"+ infoTime +"秒後失效,恢複請點選空白處!");
	}	
	// IE/fire
	function myWindowListener(fanc,time){
		if(window.attachEvent){
			return window.document.attachEvent("on"+fanc,time);
		}else{
			return window.addEventListener(fanc,time,false);
		}
	}
</script>

</x:tbody>

</html>
           

有 更好的建議,請多幫助!

獨立出來友善調用好一些。

// 執行定時器,session 過去動作
	function runTimeout(sessionTime){
		return window.setTimeout(active,sessionTime);
	}
	// 執行定時器,消息提醒
	function runInteval(sessionTime,infoTime,unit){
		var lessTime = sessionTime-infoTime*unit;
		return window.setTimeout(noticeout=notice,lessTime);
	}
	// 時間到了 直接跳轉登陸 界面
	function active(){
		forward('','/c/jsp/login/login');
	}

	// 時間即将到期 提示時間
	function notice(){
		$('#msgBox').show();
		return window.setInterval(infoAction,1000);
	}
	// 提示操作
	function infoAction(){
		infoTime --;
		$('#msgBox font').html("");
		$('#msgBox font').html("您長時間未操作,頁面将在"+ infoTime +"秒後失效,恢複請點選空白處!");
	}	
	// IE/fire
	function myWindowListener(myevent,fanc,sessionTime){
		if(window.attachEvent){
			return window.document.attachEvent("on"+myevent,fanc);
		}else{
			return window.addEventListener(myevent,fanc,false);
		}
	}
	
	// 提示時間
	var infoTime = 180;// 3分鐘
	// 點選預設重新整理session 時間
	function initSessionListener(sessionLostTime){
		var msgBox =null;
		var unit = 1000;
		// session 過期時間,機關秒
		var sessionTime = sessionLostTime*unit; 
		// 和session 同步
		var timeout = runTimeout(sessionTime);
		// 時間到了進行提示
		var outinfo = runInteval(sessionTime,infoTime,unit);
		var noticeout;
		// 隐藏提示資訊
		myWindowListener("click",function(){
				// 隐藏提示資訊
				$('#msgBox').hide();
				clearTimeout(timeout);
				clearTimeout(outinfo);
				clearInterval(noticeout);
				outinfo = runInteval(sessionTime,infoTime,unit);
				timeout = runTimeout(sessionTime);
		});
	}
           

繼續閱讀