我試圖在用戶訪問網站時獲得一次性警報,然後放置一個cookie,以便每次返回該網站時都不會使用它。 cookie被保存並且警報正在執行,但它正在執行,我正在撕掉我的頭髮。一次性警報繼續執行
我已經嘗試了一些在網上找到的東西(StackExchange,我是如何愛你)但似乎沒有工作。這是目前的狀態:
<script>
function setCookie(name, value, days)
{
if (days)
{
var date = new Date();
date.setTime(date.getTime()+days*24*60*60*1000);
var expires = "; expires=" + date.toGMTString();
}
else
var expires = "";
document.cookie = name+"=" + value+expires + ";path=/";
}
</script>
<body>
<script type="text/javascript">
if(!setCookie('testcookie')) {
alert("hello world");
setCookie('testcookie','1',3);
}
</script>
</body>
看着cookie記錄,它似乎每次都設置。如果我在腳本中更改過期日期,則每次都會在dev控制檯中進行更改。不確定這是否表示問題。
=====端到端解決方案======
我缺少的getCookie通話。我也意識到,當試圖將它添加到頭文件腳本時,執行需要是它自己的函數* facepalm *。我還將所有腳本添加到標題中,而是在body標籤中調用該函數。
<head>
<script>
function setCookie(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+days*24*60*60*1000);
var expires = "; expires=" + date.toGMTString();
}
else
var expires = "";
document.cookie = name+"=" + value+expires + ";path=/";
}
var getCookie = function (c_name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^\s+|\s+$/g, "");
if (x == c_name) {
return unescape(y);
}
}
};
function checkCookie() {
if(!getCookie('testcookie2')) {
alert("hello world");
setCookie('testcookie2','1',3);
}
}
</script>
</head>
<body onload="checkCookie()">
</body>
TA-DA!
你總是設置Cookie,但沒有任何查詢現有的Cookie使用。 – 2013-03-15 00:19:10
ftr w3schools有很多不良信息,包括貌似體面的壞信息,不認爲它們是可靠的來源。 – djechlin 2013-03-15 18:53:07
是的,我發現這是一個很好的開始,但他們經常忽略那些在學習時會產生巨大差異的小細節,或者沒有足夠的示例變體來幫助解決問題。雖然這個論壇已被證明是非常寶貴的! – 2013-03-15 20:15:13