坦率地说,哎呀!
首先,请不要将字符串传入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甚至给予这种方法的代码示例 –