坦率地說,哎呀!
首先,請不要將字符串傳入setTimeout,請注意,這太糟糕了。特別是當你甚至沒有傳遞任何參數。
做這樣的事情,而不是:
這樣,你傳遞一個引用到實際功能,而不是調用由代理eval()
。道格拉斯克羅克福德將轉入他的墳墓(如果他死了)。
接下來,所有javascript語句應以;
終止,而不是隨機的行。
接下來,在t
中的超時被觸發並調用window.location.reload()
後,您的任何代碼都不會執行任何操作。當頁面重新加載時,基本上已經有了一個新的環境,並有一個乾淨的石板,過程將重新開始。
既然這樣,你整個的代碼可以簡寫爲這樣:
<html>
<head>
</head>
<body onload="setTimeout(window.location.reload,10000)">
</body>
</html>
要解決它,你將需要瀏覽會話之間進行跟蹤。有千種方法可以做到這一點 - 網址參數,餅乾,iframe等等。但其中最簡單的可能是URL(或GET)參數,所以我們將重點關注。
頁面首次加載時,我們需要通過創建一個整數值開始跟蹤,隨着時間的推移我們可以增加整數值。然後,在每個連續的負載上,我們需要檢查當前值是否在範圍內,如果是,請遞增並將其傳遞給下一次迭代。
所以你可以做這樣的事情......
<html>
<head>
<script type="text/javascript">
var refreshURL; // Declare this globally so we can access it in the function from refreshPage()
function refreshPage() {
window.location.href = refreshURL;
}
window.onload = function() { // This construct is equivalent to setting an 'onload=' for the body tag
// Declare some variables
var urlBase, urlParams, urlParts, trackerVar, urlBase, queryStr, i, queryParts, paramParts, paramKey, paramVal, j;
urlParams = {};
// Parse the URL parameters into an object and get the base URL
urlParts = window.location.href.split('?');
urlBase = urlParts[0];
queryStr = '';
for (i = 1; i < urlParts.length; i++) {
if (i > 1) {
queryStr = queryStr + '?';
}
queryStr = queryStr + urlParts[i];
}
queryParts = queryStr.split('&');
for (i = 0; i < queryParts.length; i++) {
paramParts = queryParts[i].split('=');
paramKey = paramParts[0];
paramVal = '';
for (j = 1; j < paramParts.length; j++) {
if (j > 1) {
paramVal = paramVal + '=';
}
paramVal = paramVal + paramParts[j];
}
urlParams[paramKey] = paramVal;
}
if (urlParams['__tracker'] == undefined) {
// this is the first load, define the tracker as '1'
urlParams['__tracker'] = 1;
} else {
// this is not the first load, increment the tracker
urlParams['__tracker'] = parseInt(urlParams['__tracker']) + 1;
}
// build the url for the refreshPage function
refreshURL = urlBase + '?';
queryStr = '';
for (i in urlParams) {
if (i != '' && urlParams.hasOwnProperty(i)) {
queryStr = queryStr + '&' + i + '=' + urlParams[i];
}
}
refreshURL = refreshURL + queryStr.substr(1);
if (urlParams['__tracker'] < 6) {
// If the tracker is less than 6, reload the page in 10 seconds
setTimeout(refreshPage,2000);
}
};
</script>
</head>
<body>
</body>
</html>
我知道我是有點晚了這樣的回答,但我認爲這是值得一寫......
friend00甚至給予這種方法的代碼示例 –