我想将RSS Feed更新推送到用户在Chrome浏览器中打开我的网站时会收到的HTML5桌面通知。
我收集我需要执行以下操作(比我更聪明的人在概述中解释了这一点) - 创建一个服务器端组件,它将轮询订阅源以获取更新;然后可能将它们存储在数据库中(?)。然后,客户端组件将检查更新并使用HTML5通知API显示它们。
有人确认这一点,并且如果可能的话可以帮助我提供更多细节,以便我可以追踪我需要做的各种工作吗?非常感激。
答案 0 :(得分:1)
我将假设您正在使用jQuery,并且您不介意使用插件。在这种情况下,我们将使用jFeed插件来解析RSS代码。
// Desktop notifications are only available on WebKit browsers, for now, so only carry out
// notifications if the API is available.
if (window.webkitNotifications) {
// Just a piece of data to determine whether 1) the page just loaded, and 2) there are any
// new elements in the feed.
var lastTime = null;
// This is to check if you have permissions to display notifications. Usually, the
// checkPermissions method only returns a number. 0 being that you don't have permission
// to display notifications, yet.
if (window.webkitNotifications.checkPermissions() <= 0) {
// If you don't have permission, then get the permission from the user.
window.webkitNotifications.requestPermission(callback);
}
// The code below will run every thirty seconds.
setInterval(function () {
// What we want to do here is carry out an AJAX request to check for changes in the RSS
// feed only if we have permission to display notifications. Otherwise, what's the point
// of checking for changes if the user doesn't want to know?
if (window.webkitNotifications.checkPermissions() > 0) {
$.jFeed({
url: 'urltofeeds',
success: function (feed) {
// Looks at the latest item's time, and checks to see if it's any different
// than what we have in memory.
if (lastTime !== feed.items[0].updated) {
// If so, determine whether we recorded the time, or not.
if (lastTime !== null) {
// If we did record the time, that means there are new content from
// the last time we checked.
window.webkitNotifications()
}
// Update the last time.
lastTime = feed.items[0].updated;
}
}
});
}
}, 30000);
}
我收集我需要执行以下操作(比我更聪明的人在概述中解释了这一点) - 创建一个服务器端组件,它将轮询订阅源以获取更新;然后可能将它们存储在数据库中(?)。
听起来像你的朋友描述long-polling。对于像博客这样简单的事情,这是一个完美主义者的方法。
简单的轮询将是一回事。不同的是,通知只会在每个轮询间隔显示,而不是即时显示。