如何从一个或多个选项卡重置一个变量的值?

时间:2016-01-29 06:31:08

标签: javascript jquery browser tabs

我有两个标签。一个是主页选项卡,另一个是主页1选项卡。在这里,我跟踪登录到登出时间的时间计数。我在一个java脚本文件中有以下代码。这项工作作为两个实例。

主页标签 - > www.example.com/home //(我的java脚本文件包含此目录)第一个实例。

home-1标签 - > www.example.com/home-1 //(必需的脚本文件包含从主页选项卡到此选项卡)第二个实例。

任何键/鼠标事件都会重置计数器。

var sestmout=0;
var idletm=60*1;
var idletmcntr=0;
var idletimeout=null;
var lastUpdate1 = new Object();
var lastUpdate = 0;
var curdttm = new Date();

$(document).ready(function(){
    initidletm();
});

lastUpdate1.cntr = idletmcntr;  
lastUpdate1.ctme = curdttm.getMilliseconds();
lastUpdate1.time = curdttm.getTime();

function reset_cnt(){
if(idletmcntr != 0){
        curdttm = new Date();
        lastUpdate1.cntr = idletmcntr;  
        lastUpdate1.ctme = curdttm.getMilliseconds();
        lastUpdate1.time = curdttm.getTime();
        var a = moment();
        lastUpdate1.utme = a.valueOf();
    }
    idletmcntr=0;
}

document.onclick=function(){
    reset_cnt();

};
document.onmousemove=function(){
    reset_cnt();
};
document.onkeypress=function() {
    reset_cnt();
};

在每个标签中,我在java脚本文件中包含上面的行。现在,我在主页选项卡上触发鼠标/键事件,在主页-1选项卡中重置计数器值。

使用此代码。

function initidletm(){
if(window.name == "home-1"){
    window.opener.document.onkeypress = document.onkeypress;
    window.opener.document.onclick = document.onclick;
    window.opener.document.onmousemove = document.onmousemove;

}else if(window.name == "home-2"){
    window.opener.document.onkeypress = document.onkeypress;
    window.opener.document.onclick = document.onclick;
    window.opener.document.onmousemove = document.onmousemove;
}
else{           // home tab
    document.onkeypress=function() {
        reset_cnt();
    };
    document.onclick=function() {
        reset_cnt();
    };
    document.onmousemove=function() {
        reset_cnt();
    };

} 
}
clearTimeout(idletimeout);
idletimeout=setTimeout(trackidletm,1000);

function trackidletm() {
    initidletm();
}

这种方法是写的还是错的。只有主页选项卡将计数器值重置为home-1和其他选项卡。 home-1选项卡等其他选项卡不会重置主页选项卡和其他选项卡。什么理由?以及如何从工作选项卡重置其他选项卡计数器值?

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式编写功能:当您执行某些操作时,它会在HTML5 localStorage中存储一个值。

if (typeof(Storage) !== "undefined") {
    localStorage.setItem("reset", "true"); 
}

如果你不做任何事情,它会把它设置为假。

localStorage.setItem("reset", "false");

您可以像这样检查这些值:

localStorage.getItem("reset");

因此,当您拥有同一域的不同标签时,您可以查看并查看您是否在其他标签页中执行了任何操作。

参考:http://www.w3schools.com/html/html5_webstorage.asp

希望它有所帮助。