Javascript 使浏览器窗口在任务栏中闪烁

Javascript 使浏览器窗口在任务栏中闪烁,javascript,browser,Javascript,Browser,如何使用JavaScript使用户的浏览器在任务栏中闪烁/闪烁/突出显示?例如,如果我每10秒发出一个AJAX请求,以查看用户在服务器上是否有任何新消息,我希望用户立即知道,即使他当时正在使用另一个应用程序 编辑:当新消息到达时,这些用户确实希望分心。我能想到的唯一方法是在收到消息时执行类似“提醒”(“您有一条新消息”)的操作。如果窗口最小化,这将使任务栏闪烁,但它也会打开一个对话框,您可能不想看到这个对话框。为什么不采用GMail使用的方法,在页面标题中显示消息的数量 有时,用户不想在收到新消

如何使用JavaScript使用户的浏览器在任务栏中闪烁/闪烁/突出显示?例如,如果我每10秒发出一个AJAX请求,以查看用户在服务器上是否有任何新消息,我希望用户立即知道,即使他当时正在使用另一个应用程序


编辑:当新消息到达时,这些用户确实希望分心。

我能想到的唯一方法是在收到消息时执行类似“提醒”(“您有一条新消息”)的操作。如果窗口最小化,这将使任务栏闪烁,但它也会打开一个对话框,您可能不想看到这个对话框。

为什么不采用GMail使用的方法,在页面标题中显示消息的数量

有时,用户不想在收到新消息时分心

当新消息到达时,这些用户确实希望分心

听起来你在为公司内部项目编写应用程序

您可能想研究在.net中编写一个小的windows应用程序,该应用程序添加一个通知图标,然后在收到新消息时,可以执行奇特的弹出窗口或气球弹出窗口或其他任何操作

这并不太难,我相信如果你问“我如何显示托盘图标”和“我如何进行弹出通知”,你会得到一些很好的答案:-)


作为记录,我非常确定(除了使用提醒/提示对话框)你不能在JS中刷新任务栏,因为这是非常特定于windows的,而JS确实不是这样工作的。您可能能够使用某些特定于IE的windows activex控件,但随后您将IE强加给您的可怜用户。不要这样做:-(

你可以用每一条新消息更改网页的标题,以提醒用户。我这样做是为了一个浏览器聊天客户端,大多数用户认为它工作得足够好

document.title = "[user] hello world";
我的“用户界面”回答是:你确定你的用户希望他们的浏览器闪烁,还是你认为这是他们想要的?如果我是使用你的软件的人,我知道如果这些警报经常发生并妨碍我,我会很恼火

如果你确定你想这样做,可以使用javascript提醒框。谷歌日历就是这样做的,他们可能会考虑一下


网页并不是“需要知道”警报的最佳媒介。如果您是按照“僵尸,服务器停机!”的思路设计的,那么向合适的人发送警报、自动电子邮件或短信可能会起到作用。

您可能想试试window.focus()-但如果屏幕切换可能会让人恼火,这不会使任务栏按钮在颜色变化时闪烁,但标题会在他们移动鼠标之前闪烁。这应该可以跨平台工作,即使他们只是在不同的选项卡中

newExcitingAlerts = (function () {
    var oldTitle = document.title;
    var msg = "New!";
    var timeoutId;
    var blink = function() { document.title = document.title == msg ? ' ' : msg; };
    var clear = function() {
        clearInterval(timeoutId);
        document.title = oldTitle;
        window.onmousemove = null;
        timeoutId = null;
    };
    return function () {
        if (!timeoutId) {
            timeoutId = setInterval(blink, 1000);
            window.onmousemove = clear;
        }
    };
}());


更新:您可能想看看如何使用。

假定您可以在windows上使用growl for windows javascript API实现这一点:

不过,您的用户必须安装growl

最终,它将以NotificationAPI的形式成为google gears的一部分:


因此,我建议现在使用咆哮的方法,如果可能的话,回到窗口标题更新,并且已经在尝试使用Gears通知API,以便在它最终可用时使用。

AFAIK,在一致性方面没有好的方法。我正在编写一个仅基于IE的IM客户端。我们最终使用了window.focus(),这在大多数情况下都能正常工作。有时,它实际上会导致窗口从前台应用程序中窃取焦点,这可能真的很烦人。

我在浏览器标题栏中设置了一个选项,用于闪烁通知消息。您可以指定不同的选项,如闪烁间隔、持续时间,如果获胜时闪烁应该停止dow/tab获得关注,等等。该插件在Firefox、Chrome、Safari、IE6、IE7和IE8中工作

下面是一个关于如何使用它的示例:

$.titleAlert("New mail!", {
    requireBlur:true,
    stopOnFocus:true,
    interval:600
});
如果您不使用jQuery,您可能仍然希望查看(如果您想完全支持所有主要浏览器,在执行标题闪烁时,您需要解决一些奇怪的错误和边缘情况)。

使浏览器窗口在任务栏中闪烁


不可能!!

我无法按照IE 8中的描述使其工作。它会一直闪烁标题。我没有使用onmousemove,而是使用onfocus和onblur来跟踪窗口何时处于焦点位置,并停止onfocus函数中的闪烁。因此,当页面加载时,我注册了onfocus和onblur函数来切换一个布尔“聚焦”变量。我有另一个布尔值来跟踪闪烁何时开始。在onfocus中,如果闪烁已开始,我将停止闪烁。这在Chrome中似乎不起作用……我认为Chrome不理解空字符串是什么。如果我使用连字符作为“空白”消息,它工作正常。如果多次触发警报,这似乎会叠加。这会导致间隔越来越快,然后当删除时,它只删除一个间隔。在Windows 7中,更改标题不会在TaskBar中闪烁/闪烁。如何传递参数(消息)奇怪的是,yahoo mail做到了这一点,我想知道在当前的浏览器中,每个浏览器的行为都不一样,没有一个会让任务栏图标闪烁(测试了Win8-IE10、Chrome、Firefox)这并不是问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。@secretformula是否真的有必要挖掘5年前的帖子并将其标记为低质量?@Taifun it出现在VLQF队列中,所以是的。Meta已经讨论过这一点too@secretformula,这实际上提供了这是一个很好的答案:使用JavaScript
警报。不管错与否,这在我看来都不是一个答案,但历史表明有两位版主已经拒绝了NAA标志,所以我在这里遵循共识。
                var oldTitle = document.title;
                var msg = "New Popup!";
                var timeoutId = false;

                var blink = function() {
                    document.title = document.title == msg ? oldTitle : msg;//Modify Title in case a popup

                    if(document.hasFocus())//Stop blinking and restore the Application Title
                    {
                        document.title = oldTitle;
                        clearInterval(timeoutId);
                    }                       
                };

                if (!timeoutId) {
                    timeoutId = setInterval(blink, 500);//Initiate the Blink Call
                };//Blink logic 
function blinkTab() {
        const browserTitle = document.title;
        let timeoutId;
        let message = 'My New Title';

        const stopBlinking = () => {
            document.title = browserTitle;
            clearInterval(timeoutId);
        };

        const startBlinking = () => {
            document.title = document.title  === message ? browserTitle : message;
        };

        function registerEvents() {
            window.addEventListener("focus", function(event) { 
                stopBlinking();
            });

            window.addEventListener("blur", function(event) {
                const timeoutId = setInterval(startBlinking, 500);
            });
        };

        registerEvents();
    };


    blinkTab();
via Javascript