Javascript定时重定向
我已经设置了一个重定向,或者用户是否在页面上处于活动状态。多亏了我,我的工作效率达到了99%。只有一个功能我一直在努力 JS是google chrome扩展的一部分 页面不活动2秒后会弹出重定向警告,如果在5秒内没有其他活动,则页面将重定向到google.com(仅出于测试目的使用google.com) 一旦重定向到google.com,计时器会在2秒后再次启动-我不想这样 我只想在用户在google.com上处于活动状态时启动计时器(即触摸屏幕) 我是否需要在某处添加额外的stopTimer功能 我基本上希望计时器出现在除了主页(在本例中是google.com)之外的每个页面上 我的代码到目前为止-我已经创建了一个 google重定向在JS fiddle中不起作用,但在我的实时环境中起作用Javascript定时重定向,javascript,function,redirect,google-chrome-extension,timer,Javascript,Function,Redirect,Google Chrome Extension,Timer,我已经设置了一个重定向,或者用户是否在页面上处于活动状态。多亏了我,我的工作效率达到了99%。只有一个功能我一直在努力 JS是google chrome扩展的一部分 页面不活动2秒后会弹出重定向警告,如果在5秒内没有其他活动,则页面将重定向到google.com(仅出于测试目的使用google.com) 一旦重定向到google.com,计时器会在2秒后再次启动-我不想这样 我只想在用户在google.com上处于活动状态时启动计时器(即触摸屏幕) 我是否需要在某处添加额外的stopTimer功
var div = document.createElement("div");
div.style.display = "none";
div.style.height = "18em";
div.style.width = "30em";
div.style.marginTop = "-9em";
div.style.marginLeft = "-15em";
div.style.background = "#f2dede";
div.style.color = "black";
div.style.position = "absolute";
div.style.padding = "20px";
div.style.top = "50%";
div.style.left = "50%";
div.style.border = "5px solid #ebccd1";
div.style.borderRadius = "20px";
div.style.textAlign = "center";
div.style.zIndex = "9999";
document.body.appendChild(div);
var timeoutID;
var timerID;
var idleTimeout = 5;
var idleSecondsTimer = null;
var idleSecondsCounter = 0;
function setup() {
this.addEventListener("mousemove", resetTimer, false);
this.addEventListener("mousedown", resetTimer, false);
this.addEventListener("keypress", resetTimer, false);
this.addEventListener("DOMMouseScroll", resetTimer, false);
this.addEventListener("mousewheel", resetTimer, false);
this.addEventListener("touchmove", resetTimer, false);
this.addEventListener("MSPointerMove", resetTimer, false);
startTimer();
}
setup();
function startTimer() {
// wait 2 seconds before calling goInactive
timeoutID = setTimeout(goInactive, 2000);
}
function resetTimer(e) {
clearTimeout(timeoutID);
clearTimeout(timerID);
goActive();
}
function stopTimer(e) {
window.clearTimeout(timeoutID);
}
function goInactive() {
idleSecondsCounter = 0;
div.style.display = "block";
div.innerHTML = "<strong>Inactivity detected.</strong> <p>Redirecting in <span id='countdown'>" + (idleTimeout - idleSecondsCounter) + " </span> seconds. <p>Please touch screen to cancel.";
// show a count down here then redirect to google.com
timerID = setInterval(function(){
idleSecondsCounter++;
if(idleSecondsCounter >= 6) {
clearTimeout(timerID);
window.location.href = "http://google.com";
}
else {
document.getElementById("countdown").innerHTML = (idleTimeout - idleSecondsCounter);
}
}, 1000);
}
function goActive() {
div.style.display = "none";
startTimer();
}
var div=document.createElement(“div”);
div.style.display=“无”;
div.style.height=“18em”;
div.style.width=“30em”;
div.style.marginTop=“-9em”;
div.style.marginLeft=“-15em”;
div.style.background=“#f2dede”;
div.style.color=“黑色”;
div.style.position=“绝对”;
div.style.padding=“20px”;
div.style.top=“50%”;
div.style.left=“50%”;
div.style.border=“5px solid#ebccd1”;
div.style.borderRadius=“20px”;
div.style.textAlign=“中心”;
div.style.zIndex=“9999”;
文件.正文.附件(div);
var-timeoutID;
var-timerID;
var idleTimeout=5;
var idleSecondsTimer=null;
var idleSecondsCenter=0;
函数设置(){
addEventListener(“mousemove”,resetTimer,false);
这个.addEventListener(“mousedown”,resetTimer,false);
此.addEventListener(“按键”,重置计时器,错误);
这个.addEventListener(“DOMMouseScroll”,resetTimer,false);
此.addEventListener(“鼠标滚轮”,重置计时器,false);
此.addEventListener(“touchmove”,resetTimer,false);
此.addEventListener(“MSPointerMove”,resetTimer,false);
startTimer();
}
设置();
函数startTimer(){
//请等待2秒钟后再调用goInactive
timeoutID=设置超时(goInactive,2000);
}
功能重置计时器(e){
clearTimeout(timeoutID);
清除超时(timerID);
目的性();
}
功能停止计时器(e){
clearTimeout(timeoutID);
}
函数goInactive(){
IDLESecondsCenter=0;
div.style.display=“块”;
div.innerHTML=“检测到不活动。在“+(idleTimeout-idleSecondsCenter)+”秒内重定向。请触摸屏取消。“;
//在此处显示倒计时,然后重定向到google.com
timerID=setInterval(函数(){
idleSecondsCenter++;
如果(IDLESecondsCenter>=6){
清除超时(timerID);
window.location.href=”http://google.com";
}
否则{
document.getElementById(“倒计时”).innerHTML=(idleTimeout-idleSecondsCenter);
}
}, 1000);
}
函数goActive(){
div.style.display=“无”;
startTimer();
}
我上面使用的时间是用于测试目的的,将在实时环境中增加
var div = document.createElement("div");
div.style.display = "none";
div.style.height = "18em";
div.style.width = "30em";
div.style.marginTop = "-9em";
div.style.marginLeft = "-15em";
div.style.background = "#f2dede";
div.style.color = "black";
div.style.position = "absolute";
div.style.padding = "20px";
div.style.top = "50%";
div.style.left = "50%";
div.style.border = "5px solid #ebccd1";
div.style.borderRadius = "20px";
div.style.textAlign = "center";
div.style.zIndex = "9999";
document.body.appendChild(div);
var timeoutID;
var timerID;
var idleTimeout = 5;
var idleSecondsTimer = null;
var idleSecondsCounter = 0;
function setup() {
this.addEventListener("mousemove", resetTimer, false);
this.addEventListener("mousedown", resetTimer, false);
this.addEventListener("keypress", resetTimer, false);
this.addEventListener("DOMMouseScroll", resetTimer, false);
this.addEventListener("mousewheel", resetTimer, false);
this.addEventListener("touchmove", resetTimer, false);
this.addEventListener("MSPointerMove", resetTimer, false);
startTimer();
}
setup();
function startTimer() {
// wait 2 seconds before calling goInactive
timeoutID = setTimeout(goInactive, 2000);
}
function resetTimer(e) {
clearTimeout(timeoutID);
clearTimeout(timerID);
goActive();
}
function stopTimer(e) {
window.clearTimeout(timeoutID);
}
function goInactive() {
idleSecondsCounter = 0;
div.style.display = "block";
div.innerHTML = "<strong>Inactivity detected.</strong> <p>Redirecting in <span id='countdown'>" + (idleTimeout - idleSecondsCounter) + " </span> seconds. <p>Please touch screen to cancel.";
// show a count down here then redirect to google.com
timerID = setInterval(function(){
idleSecondsCounter++;
if(idleSecondsCounter >= 6) {
clearTimeout(timerID);
window.location.href = "http://google.com";
}
else {
document.getElementById("countdown").innerHTML = (idleTimeout - idleSecondsCounter);
}
}, 1000);
}
function goActive() {
div.style.display = "none";
startTimer();
}
如果有任何帮助,我们将不胜感激。当执行
setup()
时,页面加载时计时器将无条件启动
如果您只想在某些活动之后启动,只需从
设置()中删除startTimer()
code-在任何您将调用resetTimer
启动流程的活动中。您知道页面重定向时内容脚本会重新加载到新的URL上吗?谢谢@wOxxOm-这对我的代码或下面提供的答案有何影响?将此信息与答案结合起来,您将看到setup()
将在重定向后无条件执行。谢谢@Xan,这似乎起作用了!这是一个触摸屏信息亭,所以还有一个可能的问题。例如,如果用户打开一个新窗口并走开,该窗口将始终保持打开状态,因为用户没有与它交互,因此计时器将不会启动。也许我太迂腐了!我基本上希望除了我的主页(在这个例子中是google.com)之外的每个页面上都有计时器。再次感谢主修复!如果你不想重定向Google,你可以在重定向之前测试窗口。位置,而不是此修复程序,或者只在它是Google的情况下应用此修复程序。我不太清楚你的意思,但感谢你的回答。我指的是假设检查如果(!is_Google)startTimer()
在设置()内
可通过窗口位置实现。