代码之家  ›  专栏  ›  技术社区  ›  erik

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

  •  101
  • erik  · 技术社区  · 16 年前

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

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

    11 回复  |  直到 6 年前
        1
  •  84
  •   lance    6 年前

    这不会使任务栏按钮以不同的颜色闪烁,但标题在移动鼠标之前会上下闪烁。这应该可以跨平台工作,即使它们只是在不同的选项卡中。

    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;
            }
        };
    }());
    

    更新 :您可能希望使用 HTML5 notifications .

        2
  •  54
  •   heyman    14 年前

    我做了一个 jQuery plugin 用于在浏览器标题栏中闪烁通知消息。您可以指定不同的选项,如闪烁间隔、持续时间、窗口/选项卡聚焦时是否应停止闪烁等。该插件在Firefox、Chrome、Safari、IE6、IE7和IE8中工作。

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

    $.titleAlert("New mail!", {
        requireBlur:true,
        stopOnFocus:true,
        interval:600
    });
    

    如果您不使用jquery,您可能仍然需要查看 source code (如果您想完全支持所有主要浏览器,在闪烁标题时,您需要处理一些奇怪的错误和边缘情况)。

        3
  •  6
  •   Joeri Sebrechts    16 年前

    假设您可以在Windows上使用Windows Javascript API的咆哮进行此操作:

    http://ajaxian.com/archives/growls-for-windows-and-a-web-notification-api

    不过,您的用户必须安装Groll。

    最终,这将成为GoogleGears的一部分,以notificationAPI的形式出现:

    http://code.google.com/p/gears/wiki/NotificationAPI

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

        4
  •  4
  •   Rudi    16 年前

    我的“用户界面”回答是:你确定吗 你的用户 希望他们的浏览器闪烁,或者 你认为 这就是他们想要的?如果我是那个使用你的软件的人,我知道如果这些警报经常发生并且妨碍了我,我会很生气的。

    如果您确定要这样做,请使用JavaScript警报框。这就是谷歌日历为事件提醒所做的,他们可能会在其中加入一些想法。

    网页并不是了解警报的最佳媒介。如果你是按照“zomg,服务器坏了”的思路来设计的。向合适的人发送警报、自动电子邮件或短信息可能会起作用。

        5
  •  3
  •   Robin Barnes    16 年前

    我唯一能想到的方法就是在收到消息时做一些类似于alert(你有一条新消息)的事情。如果窗口最小化,这将闪烁任务栏,但它也将打开一个对话框,您可能不需要它。

        6
  •  3
  •   andyuk    16 年前

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

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

        7
  •  3
  •   Rikki Goswami    9 年前
                    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 
    
        8
  •  2
  •   Sugendran    16 年前

    您可能想尝试window.focus()-但是如果屏幕切换,可能会很烦人。

        9
  •  1
  •   Toran Billups    16 年前

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

    document.title = "[user] hello world";
    
        10
  •  1
  •   Chase Seibert    16 年前

    阿法克,没有一个好方法可以做到这一点。我在写一个只支持IE的网络即时通讯客户端。我们最终使用了window.focus(),这在大多数情况下都有效。有时它会导致窗口从前台应用程序窃取焦点,这真的很烦人。

        11
  •  0
  •   Orion Edwards    16 年前

    当新邮件到达时,这些用户确实希望分心。

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

    您可能想研究在.NET中编写一个小的Windows应用程序,它添加了一个通知图标,然后可以在收到新消息时执行花哨的弹出或气球弹出等操作。

    这并不难,我敢肯定,如果你问“我如何显示托盘图标”和“我如何执行弹出通知”,你会得到一些很好的答案:—)

    据我所知,我很确定(除了使用警报/提示对话框)你不能用JS来刷新任务栏,因为这是一个非常特殊的Windows操作系统,而JS并不是这样工作的。您可以使用一些特定于IE的WindowsActiveX控件,但这样会使您的劣质用户受到IE的影响。不要这样做:-(