【问题标题】:Make browser window blink in task Bar使浏览器窗口在任务栏中闪烁
【发布时间】:2010-09-07 10:02:10
【问题描述】:

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

编辑:这些用户确实希望在收到新消息时分心。

【问题讨论】:

  • 很奇怪,雅虎邮箱是怎么做到的,我不知道是怎么做到的

标签: javascript browser


【解决方案1】:

这不会使任务栏按钮闪烁改变颜色,但标题会闪烁,直到他们移动鼠标。这应该可以跨平台工作,即使他们只是将其放在不同的选项卡中。

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

【讨论】:

  • 我无法让它像 IE 8 中描述的那样工作。它一直在不停地闪烁标题。我不得不使用 onfocus 和 onblur 来跟踪窗口何时处于焦点状态并停止 onfocus 函数中的闪烁,而不是使用 onmousemove。因此,当页面加载时,我注册了 onfocus 和 onblur 函数来切换布尔“聚焦”变量。我有另一个布尔值来跟踪闪烁开始的时间。在 onfocus 中,如果闪烁已经开始,我会停止它。
  • 这似乎在 Chrome 中不起作用......我认为 Chrome 不理解空字符串是什么。如果我使用连字符作为“空白”消息,它可以正常工作。
  • 如果多次触发警报,这似乎会叠加。这导致间隔越来越快,然后当你删除时,它只删除一个间隔。
  • 在 Windows 7 中,更改标题不会在任务栏中闪烁
  • 你如何将参数(消息)传递给这个?
【解决方案2】:

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

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

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

如果您不使用 jQuery,您可能仍想查看 source code(如果您想完全支持所有主要浏览器)。

【讨论】:

    【解决方案3】:

    假设您可以在 windows 上使用rowl for windows javascript API 执行此操作:

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

    您的用户将不得不安装咆哮。

    最终这将成为谷歌齿轮的一部分,以 NotificationAPI 的形式:

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

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

    【讨论】:

      【解决方案4】:
                      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 
      

      【讨论】:

        【解决方案5】:

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

        如果您确定要这样做,请使用 javascript 警报框。这就是 Google 日历对事件提醒所做的事情,他们可能对此有所考虑。

        网页确实不是需要知道警报的最佳媒介。如果您正在设计类似“ZOMG,服务器已关闭!”的内容。向正确的人发送警报、自动电子邮件或 SMS 消息可能会起到作用。

        【讨论】:

        • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
        • @secretformula 真的有必要挖出 5 年前的帖子并将其标记为低质量吗?
        • @Taifun 它出现在 VLQF 队列中,所以是的。 Meta 也讨论过这个问题
        • @secretformula,这确实为这个问题提供了一个很好的答案:使用 JavaScript alert
        • 错与否,这看起来不像是我的答案,但历史表明 2 位版主已经拒绝了 NAA 标志,所以我在这里遵循共识。
        【解决方案6】:

        我能想到的唯一方法是在收到消息时执行类似 alert('you have a new message') 之类的操作。如果窗口最小化,这将使任务栏闪烁,但它也会打开一个对话框,您可能不希望这样做。

        【讨论】:

        • 当前浏览器不一致 - 每个浏览器的行为不同,并且没有一个使任务栏图标闪烁(测试 Win8 - IE10、Chrome、Firefox)
        【解决方案7】:

        为什么不采用 GMail 使用的方法并在页面标题中显示邮件数量?

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

        【讨论】:

          【解决方案8】:

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

          document.title = "[user] hello world";
          

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:
                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();
                

                【讨论】:

                • 闪烁标签的好方法
                【解决方案12】:

                这些用户确实希望在收到新消息时分心。

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

                您可能想研究在 .net 中编写一个小型 Windows 应用程序,该应用程序添加一个通知图标,然后可以在收到新消息时执行精美的弹出窗口或气球弹出窗口等。

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

                作为记录,我很确定(除了使用警报/提示对话框)您不能在 JS 中闪烁任务栏,因为这在很大程度上是特定于 Windows 的,而 JS 真的不能那样工作.您也许可以使用一些特定于 IE 的 windows activex 控件,但随后您将 IE 强加给可怜的用户。不要那样做:-(

                【讨论】:

                  【解决方案13】:

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

                  via Javascript 
                  

                  不可能!!

                  【讨论】:

                    猜你喜欢
                    • 2015-01-29
                    • 2011-07-04
                    • 2013-11-16
                    • 2015-08-04
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-09-06
                    相关资源
                    最近更新 更多