0

我正在尝试创建一个在您启动时具有警报的网页。系统将提示用户输入姓名或您的用户名。用户名将保存在 cookie 中。每次新会话开始时,用户都会看到一条消息“你好”+用户名。但是,在访问网页的新部分后,如果没有弹出消息,我就无法做到这一点。

到目前为止,这是我的代码:

HTML

function setCookie(c_name,value,exdays)
        {
        var exdate=new Date();
        exdate.setDate(exdate.getDate() + exdays);
        var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
        document.cookie=c_name + "=" + c_value;
        }

    function getCookie(c_name)
    {
        var c_value = document.cookie;
        var c_start = c_value.indexOf(" " + c_name + "=");
        if (c_start == -1)
          {
          c_start = c_value.indexOf(c_name + "=");
          }
        if (c_start == -1)
          {
          c_value = null;
          }
        else
          {
          c_start = c_value.indexOf("=", c_start) + 1;
          var c_end = c_value.indexOf(";", c_start);
          if (c_end == -1)
          {
        c_end = c_value.length;
        }
        c_value = unescape(c_value.substring(c_start,c_end));
        }
        window.c_value = c_value
    return c_value;
    }

    function alertornot(){
        if (get_cookie('alerted')==''){
        loadalert()
        document.cookie="alerted=yes"
        }
    }

    function loadalert(){
        alert(window.username + "we meet again" )
    }
    function alert() {
        var username=getCookie("username");
        

        if (username!=null && username!="") {


            if (once_per_session==0) {
                loadalert()
            }
            else {
                alertornot()
            }
        }
        else {
            username=prompt("Please enter your name:","");
            // window.username = username
            if (username!=null && username!="") {
                setCookies("username", username, 365)
            }

        }

    }

我对编程和 JavaScript 很陌生。如果这是一个愚蠢的问题,我很抱歉。

4

4 回答 4

1
  1. 你写了“setCookies(...)”,但它是没有“s”的“setCookie”。
  2. 您进行了无限循环,因为您替换了“alert(...)”本机函数并在此函数中调用了 alert()。执行模式:alert() > loadalert() > alert() > loadalert() > 等等...

    重命名您的函数。

  3. 您没有定义“once_per_session”变量。

Javascript

function n_alert() {
    window.username = getCookie("username");
    console.log(username);
    if (username!="undefined" && username!==null && username!=="") {
        alert(window.username + " we meet again" );
    } else {
        username=prompt("Please enter your name:","");

        if (username!==null && username!=="") {
            setCookie("username", username, 365);
        }
    }  
}

n_alert();

http://jsbin.com/ucipom/2/edit

于 2013-06-03T19:30:29.647 回答
0

尝试这个:

<script>
function getCookie(c_name)
{
var c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1)
{
c_start = c_value.indexOf(c_name + "=");
}
if (c_start == -1)
{
c_value = null;
}
else
{
c_start = c_value.indexOf("=", c_start) + 1;
var c_end = c_value.indexOf(";", c_start);
if (c_end == -1)
{
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start,c_end));
}
return c_value;
}

function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}

function checkCookie()
{
var username=getCookie("username");
if (username!=null && username!="")
  {
  alert("Welcome again " + username);
  }
else 
  {
  username=prompt("Please enter your name:","");
  if (username!=null && username!="")
    {
    setCookie("username",username,365);
    }
  }
}
</script>
</head>
<body onload="checkCookie()">
于 2013-06-03T19:14:37.457 回答
0

在这里的最后一个答案

当我刷新页面时弹出仍然出现

如果您只想弹出一次(而不是每次刷新页面),请设置另一个 cookie。

请参阅让 cookie 在 30 秒内过期以将 Cookie 设置为秒而不是日期(对于 popupcookie)。

Javascript

function isCookie(c_name) {
    var cook = getCookie(c_name);
    return (cook!="undefined" && cook!==null && cook!=="");
}

function n_alert() {
    var username = getCookie("username");
    if (isCookie("username")) {
        if (!isCookie("popupcookie")) {
            alert(username + " we meet again" );
        } else {
            console.log("hidden alert : " + username + " we meet again" );
        }
        setCookie("popupcookie", username, 1); //restart
    } else {
        username=prompt("Please enter your name:","");

        if (username!==null && username!=="") {
            setCookie("username", username, 365);
        }
    }
}

n_alert();

http://jsbin.com/ucipom/6/edit

备注我发现问题,如果您使用不同的目录(路径)例如:' ./ ' 和 ' ./dir1/1/ '。你可能有问题。就像您没有在目录中定义或重新定义根 cookie 一样。也许使用会话存储

于 2013-06-04T05:40:38.060 回答
0

你不应该命名一个函数alert,因为它已经是一个全局对象。另外,我看不到您在哪里调用此代码。

我会将alert函数重命名为promptUser(或其他)并将此代码添加到底部:

promptUser();
loadAlert();
于 2013-06-03T19:00:32.060 回答