通过javascript更新多个窗口

时间:2012-06-25 20:14:47

标签: javascript jquery browser

我的网站设置了超时,因此在活动15分钟后会出现一个登录屏幕,要求您刷新会话。

这很有效,但如果您在网站上打开了多个窗口,则表示将使用登录详细信息刷新一个页面,但另一个页面将不会刷新。

所以问题是,有没有办法在网站上打开的每个窗口上执行以下代码?

$jq('#loginbox').hide()

感谢您的帮助。我还应该声明其他窗口不会通过JavaScript打开,用户可以在链接的新窗口/标签中单击打开

4 个答案:

答案 0 :(得分:3)

您无法使用JS访问自己未打开的窗口。

每个窗口都应检测到它超时并显示登录对话框。如果用户在窗口A中登录,则窗口B应该轮询服务器以检测是否已创建会话,并在该情况下恢复自身。

答案 1 :(得分:2)

在切换到刷新屏幕(弹出窗口?)之前,您只需对服务器执行ajax调用即可查看用户上次刷新的时间 - 如果用户仍然合法登录,只需将计时器重置为正确的时间

答案 2 :(得分:1)

如果未通过JavaScript打开其他窗口,您将无法以编程方式访问它。换句话说,原始窗口无法在另一个窗口中调用JavaScript函数。

但是,如果窗口具有相同的域(如果它们位于同一网站上),则窗口可以共享cookie。因此,一种可能性是让另一个窗口轮询更新会话cookie,原始窗口可以写入。一旦会话cookie获得特定值,另一个窗口就可以检测到此更改并按您认为合适的方式做出反应。

答案 3 :(得分:0)

感谢所有发布创意的人,我选择了以下解决方案,如果有人可以增强它并发布代码,那么我会接受这个答案:

$jq(function(){
    $jq(window).bind('blur', function(){checkloginrefreshed();});
    $jq(window).bind('focus', function(){checkloginrefreshed();});
    $jq(document).bind('focusout', function(){checkloginrefreshed();});
    $jq(document).bind('focusin', function(){checkloginrefreshed();});
});
function createCookie(name,value,hours) {
    if (hours) {
        var date = new Date();
        date.setTime(date.getTime()+(hours*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

function checkloginrefreshed(){
    if (parseInt(readCookie("loginset")) == 1){
        eraseCookie("loginset");        
        $jq('#timeoutwarning').dialog("close");
        $jq('#timeoutwarning').html(TIMEOUTLOGINFORM);

        clearTimeout(timer);
        clearTimeout(timerWarning);

        setupTimers();
    }
}
相关问题