我的客户希望在他们的网站中实施实时聊天系统。我可以很好地实现它 - 它通过脚本标记调用。
他们还希望它在加载之前有一点延迟。我正在考虑使用setTimeout来延迟加载,但事实证明他们只希望在第一次访问该站点时发生这种情况。
有没有办法使用setTimeout一次,然后在该会话的后续加载时跳过超时?
答案 0 :(得分:2)
使用Cookie:
在您的脚本中创建一个名为visited的cookie,并将其设置为“yes”:
document.cookie="visited=yes";
然后检查是否存在名为“visited”的cookie:
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';'); //creates an array of all cookies for the page
for (var i=0; i<ca.length; i++) { //loops through each variable
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) //if there is a match, i.e. this cookie is called 'visited'
return c.substring(name.length,c.length); //return, with the value of 'visited'
}
return "";
}
if (getCookie("visited") == "yes") {
//user has previously visited site; don't delay
}
如果您正在寻找更轻量级的解决方案,请尝试以下方法:
function cookieExists(cname) {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
if (cookies[i].split('=')[0] == cname) return true;
else break;
}
return false;
}
if(cookieExists("visited")) {
//user has visited site before
}
检查是否存在名为“已访问”的cookie
如果您希望它超级精简并且不关心可读性或可维护性,请尝试以下方法:
function cookieExists(n){var c = document.cookie.split(';');for (var i=0;i<c.length;i++){if (c[i].split('=')[0]==n) return true; else break;}return false;}
答案 1 :(得分:0)
这是你可以通过localStorage
来实现的localStorage.setItem('visited', true);
if(localStorage.getItem('visited')){
// your delayed function here
}
唯一支持localStorage不会覆盖旧浏览器。请参阅:http://caniuse.com/#feat=namevalue-storage
此外,似乎没有人知道localStorage的设置时间。如果您需要每次访问该站点的唯一访问功能,您可以使用sessionStorage(因此,如果同一客户端在另一次访问时打开该站点,则延迟功能应再次触发它们)。
我在这里制作了一个非常粗略的jsfiddle(使用jquery): http://jsfiddle.net/lharby/mhf9ysqu/