1

我一直在试图找出一种在后台进程中使用通知的方法,但在网上找不到任何关于它的信息。所以,我想出了一种解决方法并想分享(不确定这是否是最好的方法,但这里是:)

问题:我想在页面运行但在后台(模糊)时通知用户新信息。我可以alert('new info!');用来让任务栏图标闪烁,但是你必须手动关闭它(试过了,这很烦人)。我真的很喜欢这些通知,但它们只有在用户执行操作时才有效,所以没有帮助......

4

2 回答 2

0

我的解决方案:我制作了一个在后台运行并触发通知的 chrome 扩展。它的范围有点有限,因为您需要使用 chrome 来执行此操作,但它可以满足我的需要,并且出于我正在处理的问题的目的,我可以让我的用户组使用 chrome;D

细节: 扩展只有两个组件,清单和脚本。目前,我设置了清单,以便它只能在我的网站上使用匹配标识符......并且我设置了包含通知的权限。

JS 脚本有一个 window.setinterval,它在页面中查找具有 id 的元素NOTIFIER。如果它是空的,它什么也不做,否则它会根据内容创建一个通知,然后清除内容以防止多次显示相同的通知......(我尝试使用.onchange该元素,但无法触发事件...我更愿意在事件上执行此操作而不是 setInterval)

通知.js

function onExtLoad() {
  var timer = setInterval(refresh,1000);
}

document.addEventListener('DOMContentLoaded', onExtLoad());

function refresh() {
if (document.getElementById('NOTIFIER').innerHTML == "") {
    //do nothing?
} else {
    var notification = webkitNotifications.createNotification("",
        "You got a new message",
        document.getElementById('NOTIFIER').innerHTML);
    notification.show();
    document.getElementById('NOTIFIER').innerHTML = "";
}

}

然后,我需要做的就是在页面控件上添加 JS,当它添加 NOTIFIER 信息时,瞧!通知!

希望这对其他人有帮助。

@ExpertSystem: 我搞砸了 MutationObserver 但我只能让它触发一次。这是一个 JSFiddle: http: //jsfiddle.net/BTX8x/1/ 我错过了什么吗?有没有办法重置它?

编辑: 想通了,我需要subtree:true

于 2013-11-28T13:24:48.193 回答
0

我希望我不会说一些愚蠢的事情,但是从我看到它的地方(并且记得从学校),这基本上就是 http 的工作原理:一个请求被发送到服务器,它最终在执行一些服务器端代码后发出响应。基本上,您要求从服务器到客户端的“推送”功能,在这种情况下,您无法使用 HTTP。存在一些解决此限制的技巧,但基本上它们都以一定的频率发出请求(戴夫的回答正是这样做的)。如果您的站点没有发生太大变化,这意味着无缘无故发出了许多请求(没有任何变化),白白消耗带宽。

据我所知,这个问题的答案叫做 Websockets,它只被最近的浏览器支持。虽然我从来没有机会使用它,所以我无法透露更多关于它的信息。这允许全双工通信,从而允许服务器将数据“推送”到客户端。我想这就是 SO 用于“新消息”通知的内容(屏幕左上角 - 当您收到新消息时会立即看到)

于 2013-11-28T13:39:59.280 回答