收到新邮件且标签处于非活动状态时,使标题退回的最佳方法是什么?

时间:2010-08-16 09:04:10

标签: javascript jquery asynchronous

这是我到目前为止所做的,但它很丑陋并且感觉不是最好的做法。例如,如果收到多条消息,则会多次启动changeTitle循环。

var hasFocus = true;
$(window).bind("blur", function() { 
    hasFocus = false;
});
$(window).bind("focus", function() {
    hasFocus = true;
    document.title = 'SiteName | Chat'; 
});
var i=0;
function changeTitle() {
    i++;
    if(i%2) {
        document.title = 'New message on SiteName!';
    }
    else {
        document.title = 'SiteName | Chat';
    }
    if(!hasFocus) {
        setTimeout('changeTitle()',1000);
    }
}

// Then I call changeTitle() when a new message is received.

2 个答案:

答案 0 :(得分:1)

这就是我最终要做的事情。

function changeTitle() {
    i++;
    if(i%2) {
        document.title = 'New message on mysite!';
    }
    else {
        document.title = 'MySite | Chat';
    }
    if(!hasFocus) {
        titleCurrentlyChanging = true;
        setTimeout('changeTitle()',1000);
    }
    else {
        titleCurrentlyChanging = false;
        i=0;
        document.title = 'MySite | Chat';
    }
}

在addMessage()函数内部,当收到新消息时调用该函数:

if(!hasFocus && !titleCurrentlyChanging) {
    changeTitle();
}

在全局命名空间内:

var i = 0;
var titleCurrentlyChanging = false;

var hasFocus = true;
$(window).bind("blur", function() { 
    hasFocus = false;
});
$(window).bind("focus", function() {
    hasFocus = true;
    document.title = 'MySite | Chat'; 
});

答案 1 :(得分:0)

我能想到三个:

  1. Firefox的Better gReader附加组件实际上更改了标签的favicon以显示未读帖子。看看这个问题:Changing website favicon dynamically
  2. 新的Meta SO聊天会在标题的前面添加一个(*)。这有点像让人想起固定星号以帮助告知用户未保存文件的IDE
  3. 如果消息重要时间敏感(例如聊天),您可能需要播放一个小声音以提醒用户新消息
  4. 当然,这些方法需要一些时间来适应,尽管它肯定会比不断改变标题更少侵入。