2014-03-24 106 views
0

以下是用於檢查我的頁面會話的函數。點擊警報消息後,頁面將重新加載。繼續提醒消息後循環

var timeleft = 60; 

function checkTime() { 
    timeLeft--; 

    if (timeLeft == 30) 
    { 
     alert("30 secs left."); 
     window.location.reload(); 
    } 

} 

反正是有使的timeleft繼續減(如果用戶din't沒有注意到警報消息),這樣會重定向時的timeleft是= 0

+0

'setTimeout(checkTime,1000)'? – Bergi

+1

在reload()之前保存timeleft在localstorage中,然後從那裏加載它代替第一個任務 – fcalderan

+0

請澄清你的問題?它在重新加載後捕獲(timeleft)?或者你正面臨着警報信息的問題?你的問題在某種程度上含糊不清:) – stackunderflow

回答

2

alert()是一個模式,它停止JavaScript執行。檢查驗證碼:

var start = new Date(); 
var start2; 
window.setTimeout(function() { 
    var end = new Date(); 
    var result = "time from start: " + (end.getTime() - start.getTime()) 
    result += "\ntime from alert: " + (end.getTime() - start2.getTime()) 
    result += "\nalert was open for: " + (start2.getTime() - start.getTime()) 
    alert(result); 
}, 500); 
window.setTimeout(function() { 
    alert("hello"); 
    start2 = new Date(); 
}, 100); 

搗鼓上代碼:http://jsfiddle.net/aorcsik/vfeH2/1/

看看這個代碼,它表明,即使setTimeout的期間alert()停止,但你可以檢查用戶有多少時間看警報,並通過減少測量時間除以您的行情延遲來更新您的櫃檯(timeLeft)。因此,我的解決方案是測量用戶查看警報模式的時間,只要他點擊確定,檢查他的會話是否結束,如果是重定向到註銷,或者執行通常的重定向。

var start = new Date(); 
alert("xxx"); 
var t = (new Date()).getDate() - start.getDate(); 
if (t/1000 > timeLeft) { 
    /* logout */ 
} else { 
    /* redirect */ 
} 

注:另一種解決方案是,如果你想要一個異步警報使用一些HTML彈出窗口,而不是JavaScript警告,這不會阻止JavaScript執行

+0

我認爲他歪曲了他的問題:他想重新加載頁面,同時保持計數器達到重載前的值! – stackunderflow

+0

不,我想我沒有誤解,他希望用戶註銷,即使用戶沒有注意到/點擊警報。 – aorcsik

+0

無論警報是Modal還是用戶確實注意到或沒有注意到警報消息,在他的代碼中頁面將在警報後重新加載;那麼時間間隔將從60開始;和用戶將永遠不會註銷:( – stackunderflow

1

代碼註釋註銷頁奇怪的是 首先你使用的是數(60),你認爲這是(兩分鐘),然後提醒它(左30秒)..

不管怎麼說.. 要倒計時,並且只有當你想重新加載頁面還剩30秒!

這裏的問題是,當你重新加載頁面,你會從下復位計數(60爲您的代碼)

的解決方案是下列之一: 1-保存倒計時localStorage的是指出通過@Fabrizio輸出,當頁面重新加載時,使用保存的反擊值。然而 此解決方案假定您的用戶的瀏覽器可以保存到localStorage的

2 - 第二個解決方案是,你用倒計時發表您的頁面,並用倒計數重裝吧.. 讓我們說,你頁面地址爲:WWW .myexampleaddress.com /我的空間 然後調用地址如下:?www.myexampleaddress.com/mypage的timeleft = 30

,並抓住這個服務器上,並在你的查詢字符串值刷新來自服務器的網頁..

所以你的警惕提醒後應該是這樣的

var myURL = location.href+'?timeleft=30'; 
location.href =myURL; 

我希望幫助:)

2

的你可以試試這個

setTimeout(function() { alert('30 secs left'); }, 1); 

但是,如果你想有一個定時的註銷,你可以做這樣的事情,而不是:

function checkTime() { 
    setInterval(function(){alert("30 secs left.")},30000); // shown at 30 seconds 
    setInterval(function(){logout()},60000); // called at 60 seconds 
} 

function logout() { 
    // logout functionality 
} 
+0

(Y) – Yasser

+0

+1兩個setIntervals函數....我的創始人是:如果用戶沒有點擊確定的警報消息??會退出頁面? – stackunderflow