1

我需要一些有关此 javascript 代码的帮助。

我有这个代码:

jQuery(document).ready(function(){
    if (document.cookie.indexOf('visited=true') == -1) {
    var fifteenDays = 1000*60*60*24*1;
    var expires = new Date((new Date()).valueOf() + fifteenDays);
    document.cookie = "visited=true;expires=" + expires.toUTCString();
    window.setTimeout(
function() {
    jQuery.colorbox({href:"/popup.htm", open:true, iframe:false, innerWidth:600, innerHeight:490}); 
        },

30000 )}});   

它应该在 30 秒后打开一个弹出窗口,每天一次。问题是它在 30 秒后打开的弹出窗口停留在页面上。即使客户端导航到其他页面,有没有办法让它在 30 秒后打开?因此,如果用户在一个页面上停留 15 秒,而在另一个页面上停留 15 秒,则会收到弹出窗口。

先感谢您

4

3 回答 3

1

是的。

但不可能使用document.cookie.

您需要使用服务器端 cookie 或 HTML 本地存储/会话存储。

像,Response.SetCookie("Visited", true)。我不知道你用什么做后端。

于 2012-08-01T10:40:55.380 回答
1

没门。页面卸载后,您将无法执行任何其他操作。您需要使用服务器上的其他资源(cookies、会话等)来检查窗口是否已经显示。

于 2012-08-01T10:43:03.947 回答
1

这里要克服的基本问题是在页面之间传递“状态”。由于您已经在示例中使用了 cookie,因此我们将使用它。您需要使用用户在网站上的时间(最初为 0)设置会话 cookie。然后,您需要每隔一段时间(可能每 5 秒)“轮询”一次 cookie 以更新站点总时间计数,并将其读回。如果是 30 秒或更长时间,请触发弹出窗口。

所以不要使用:

setTimeout(function() {
    // open alert box
}, 30000);

你会做这样的事情:

setTimeout(function() {
    // Increment 'time-on-site' cookie value by 5000
    // Then, if 'time-on-site' cookie value >= 30000, fire popup
}, 5000);

更新 当然,这需要与服务器进行更多的来回操作,因为您需要每 5 秒传达一次更新的值。

于 2012-08-01T10:44:03.493 回答