Javascript定时重定向

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功

我已经设置了一个重定向,或者用户是否在页面上处于活动状态。多亏了我,我的工作效率达到了99%。只有一个功能我一直在努力

JS是google chrome扩展的一部分

页面不活动2秒后会弹出重定向警告,如果在5秒内没有其他活动,则页面将重定向到google.com(仅出于测试目的使用google.com)

一旦重定向到google.com,计时器会在2秒后再次启动-我不想这样

我只想在用户在google.com上处于活动状态时启动计时器(即触摸屏幕)

我是否需要在某处添加额外的stopTimer功能

我基本上希望计时器出现在除了主页(在本例中是google.com)之外的每个页面上

我的代码到目前为止-我已经创建了一个

google重定向在JS fiddle中不起作用,但在我的实时环境中起作用

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()
设置()内
可通过
窗口位置实现。