【问题标题】:auto reload (auto refresh) html page when cookie changecookie更改时自动重新加载(自动刷新)html页面
【发布时间】:2015-03-25 22:59:13
【问题描述】:

如何在 cookie 更改时自动重新加载 html 页面?

我的主 html 页面中有这段代码:

 body onload="set_style_from_cookie()" 

当我从另一个页面更改主 html 页面的样式时,主页面如何检测到这种更改并自动重新加载?

【问题讨论】:

  • cookies 是如何改变的?来自 JavaScript,还是由服务器设置的 cookie?在最后一种情况下,您必须从客户端轮询服务器以接收新的 cookie。

标签: javascript jquery html cookies jquery-cookie


【解决方案1】:

创建一个这样的函数,它将每隔0.1 seconds检查你的cookie

//keep track of our cookie
var cookieRegistry = [];

function listenCookieChange(cookieName, callback) {
    setInterval(function() {
        if (cookieRegistry[cookieName]) {
            if (readCookie(cookieName) != cookieRegistry[cookieName]) {
                // update registry so we dont get triggered again
                cookieRegistry[cookieName] = readCookie(cookieName);
                return callback();
            }
        } else {
            cookieRegistry[cookieName] = readCookie(cookieName);
        }
    }, 100);
}


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;
}

绑定

listenCookieChange('cookiename', function() {
    Location.reload();
});

然而,这将每秒执行此脚本10x,因此您可能需要更改它。为此,请更改“100”。 (如果您将其更改为1000,它将每秒检查一次)。

【讨论】:

  • 我将 3 个代码放在 checkCookies.js 中,然后将: script type="text/javascript" src="checkCookies.js" 放在 main.html 中,但是当 cookie 更改时没有任何反应。我们必须放一个onload函数还是什么?谢谢@Jasper
  • 我不太明白,我的风格(主题)代码是: var style_cookie_name = "style" ; var style_cookie_duration = 20*365 ;
  • 函数 switch_style ( css_title ) { var i, link_tag ; for (i = 0, link_tag = document.getElementsByTagName("link") ; i
  • 函数 set_style_from_cookie() { var css_title = get_cookie( style_cookie_name ); if (css_title.length) { switch_style( css_title ); } } 功能 set_cookie (cookie_name, cookie_value, lifespan_in_days, valid_domain) { var domain_string = valid_domain ? ("; domain=" + valid_domain) : '' ; document.cookie = cookie_name + "=" + encodeURIComponent( cookie_value ) + "; max-age=" + 60 * 60 * 24 * lifespan_in_days + "; path=/" + domain_string ; }
  • 函数 get_cookie ( cookie_name ) { var cookie_string = document.cookie ; if (cookie_string.length != 0) { var cookie_value = cookie_string.match ( '(^|;)[\s]*' + cookie_name + '=([^;]*)' );返回 decodeURIComponent (cookie_value[2]) ; } 返回 '' ; }
【解决方案2】:

这个会起作用的:

我只是添加了一个时间间隔来检查 cookie 是否被更改:

现在,如果您打开另一个窗口,它也会更新!

在这个演示中只涉及背景颜色。但您可以更改它并添加您需要的样式。

<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
<style type="text/css">
</style>

<script type="text/javascript">
function cookieWrite(name,value,days){var expires=""; if(days){var date=new Date(); date.setTime(date.getTime()+(days*86400000)); expires="; expires="+date.toUTCString();} document.cookie=name+"="+value+expires+"; path=/";}
function cookieRead(name){var n=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(n)==0){return c.substring(n.length,c.length);}} return "";}
function cookieDelete(name){if(!name){var ca=document.cookie.split(";"); for(var i=0;i<ca.length; i++){var cv=ca[i].split("="); cookieWrite(cv[0],"",-1);}}else{cookieWrite(name,"",-1);}}

var mybgcolor="";
var cookieIntervall=setInterval(monitorCookie, 2000);

function set_style_from_cookie(bgcolor){
    if(typeof bgcolor=="undefined"){bgcolor=cookieRead("backgroundColor");}
    cookieWrite("backgroundColor", bgcolor, 7);
    document.body.style.backgroundColor=bgcolor;
    mybgcolor=bgcolor;
}

function monitorCookie(){
    var bgcolor=cookieRead("backgroundColor");
    if(mybgcolor!=bgcolor) set_style_from_cookie(bgcolor);
};

window.addEventListener("load",function(){set_style_from_cookie();},false);
</script>

</head>
<body>

<div> <button type="button" onclick="set_style_from_cookie('blue')">BLUE</button> </div>
<div> <button type="button" onclick="set_style_from_cookie('black')">BLACK</button> </div>
<div> <button type="button" onclick="set_style_from_cookie('white')">WHITE</button> </div>
<div> <button type="button" onclick="set_style_from_cookie('red')">RED</button> </div>
<div> <button type="button" onclick="set_style_from_cookie('yellow')">YELLOW</button> </div>

<hr />
<div>refresh page to see that the BG-color will be read from cookie</div>

</body>
</html>

【讨论】:

  • 你不需要任何代码,只是我想要一个 javascript 代码来始终检测新的 cookie 并在此 cookie 中的任何新内容之后重新加载页面@Federico
  • thx 兄弟,但是我想在 cookie 更改时自动重新加载,这次我的代码和你的一样,但是如果我打开我网站的 2 个页面并从中选择样式,我想要,我想要第二个自动重新加载.. @Federico
  • 嗨,我终于明白你需要什么了,对不起....现在应该可以了。只需在两个窗口中打开网站。
猜你喜欢
  • 2011-05-17
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 2014-10-06
相关资源
最近更新 更多