var UPDATE_INTERVAL = 10000; var ports = []; var includePostBody = false; function updateFavPosts() { var url = '/api/new_posts/'; if (includePostBody) { url += '?include_posts'; } var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == XMLHttpRequest.DONE) { if (xhr.status == 200 || xhr.status == 304) { var data = xhr.responseText; for (var i = 0; i < ports.length; i++) { port = ports[i]; try { port.postMessage(data); } catch (error) { // Assume the port was closed with the tab var index = ports.indexOf(port); ports.splice(index, 1); } } } } } xhr.open('GET', url); xhr.send(null); } onconnect = function(e) { var port = e.ports[0]; port.start(); port.onmessage = function(e) { // FIXME For now we include body even if a panel was opened once if (e.data.includePostBody) { includePostBody = true; } updateFavPosts(); } ports.push(port); } setInterval(function() { updateFavPosts(); }, UPDATE_INTERVAL);