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

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

编辑:这些用户确实想在新消息到达时分心。

这将不会使任务栏button在更改颜色时闪烁,但标题将闪烁,直到他们移动鼠标。 这应该跨平台,即使他们只是在不同的选项卡中。

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通知 。

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

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

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

如果你不使用jQuery,你可能仍然要看源代码 (如果你想完全支持所有的主stream浏览器,那么在做标题闪烁时需要解决一些古怪的bug和边缘情况)。

据推测,你可以在windows上用咆哮的javascript API来做到这一点:

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

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

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

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

所以我build议现在使用咆哮的方法,如果可能的话,回到窗口标题更新,并已经尝试使用Gears Notification API进行工程devise,最终变得可用。

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

如果您确定要这样做,请使用JavaScript警告框。 这就是谷歌日历为事件提醒做的事情,他们可能会考虑一下。

一个网页真的不是需要知道警报的最佳媒介。 如果你按照“ZOMG”devise的东西,服务器已经closures了! 警报,自动电子邮件或短信给正确的人可能会伎俩。

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

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

有时用户不希望在新消息到达时分心。

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

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

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

AFAIK,没有好的方法来做到这一点。 我正在写一个IE浏览器唯一的基于Web的IM客户端。 我们结束了使用window.focus(),大多数时候工作。 有时候会导致窗口从前台应用程序窃取焦点,这真的很烦人。

  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 

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

这听起来像你正在写一个公司内部项目的应用程序。

您可能想要调查编写一个小的Windows应用程序在.net中添加一个通知图标,然后可以做花哨的popup窗口或气球popup窗口或任何,当他们得到新的消息。

这不是太困难,我敢肯定,如果你问,'如何显示一个托盘图标'和'我怎么做popup通知',你会得到一些很好的答案:-)

为了logging,我很确定(除了使用警告/提示对话框),你不能在JS中刷任务栏,因为这是严重的Windows特定的,JS真的不能这样工作。 您可能能够使用一些特定于IE的Windows ActiveX控件,但是您可能会让您的穷用户造成IE。 不要那样做:-(