如何使客户端代码在页面刷新上工作

我需要为Web客户端推送通知,但问题是推送通知不保留在页面刷新屏幕上。 我应该如何使它在屏幕上提供一个确定的时间,而不写入数据库?

客户端

socket.on('notification', function (data) { //console.log(data.message); $('#pushnotif').html(data.message); socket.emit('other', data); }); 

服务器端

 function sendMessage(message) { io.sockets.volatile.emit('notification', {'message': message}); console.log("abc"); } 

推送通知被丢弃,因为当刷新浏览器窗口时,当前状态(包括整个DOM)被丢弃。 您需要在服务器端或客户端持久保存消息。

如果您已经使用某种forms的会话,则可以将消息写入活动会话中 。 或者,如果您在提交通知之前已经存储了某些通知,那么您可以简单地延迟将其从存储中删除(在一定的时间内或者直到用户解散它们,将事件发送回服务器)并重新发送所有存储在每个初始连接上的通知。

但是,因为你说你想避免写入分贝,我认为这是不可能的。

在客户端存储状态的传统解决scheme是使用cookie来完成。 你也可以通过操作document.cookie在客户端设置cookie,但是这有点难看。

更现代的方法是使用localStorage (大多数现代浏览器支持的特定于域和端口的键值存储)或其同胞。 如果你不想依赖HTML5的支持(例如,你正在处理IE6用户),那么有很多解决scheme可以提供各种各样的抽象。 请注意,使用IE8及以下版本的存储空间可能会非常有限,因此请注意将哪些数据转储到其中。

如果您愿意将这个function的支持限制在现代Web浏览器的用户身上,并希望保留在jQuery中, 甚至还有一个jQuery插件 ,它提供了localStoragesessionStorage的封装。