/* * Der Takt des geöffneten Backends. * * Auf einer Website ohne Besucher gibt es keinen Auslöser für wiederkehrende Aufgaben - außer * dem Menschen, der gerade in der Verwaltung arbeitet. Dieses Skript klopft in seinem Namen alle * 60 Sekunden an; der Server entscheidet, ob überhaupt etwas fällig ist. * * Drei Eigenschaften, die es unauffällig machen: * * - Es fragt nur, während der Reiter sichtbar ist. Ein vergessener Hintergrundreiter soll keine * Sitzung endlos offen halten und keine Anfragen erzeugen, die niemand sehen will. * - Es fragt nie zwei Mal gleichzeitig: eine laufende Anfrage blockiert die nächste. * - Ein Fehlschlag ist kein Ereignis. Kein Hinweis, keine Meldung - beim nächsten Takt wieder. */ (function () { var endpoint = document.querySelector('meta[name="kant-tick"]'); var token = document.querySelector('meta[name="kant-tick-token"]'); if (!endpoint || !token || !window.fetch) { return; } var busy = false; function tick() { if (busy || document.visibilityState !== 'visible') { return; } busy = true; var body = new FormData(); body.append('_csrf_token', token.content); fetch(endpoint.content, { method: 'POST', body: body, credentials: 'same-origin' }) .catch(function () {}) .then(function () { busy = false; }); } // Der erste Takt kommt verzögert: beim Seitenaufbau hat der Browser Wichtigeres zu tun. window.setTimeout(tick, 5000); window.setInterval(tick, 60000); document.addEventListener('visibilitychange', function () { if (document.visibilityState === 'visible') { tick(); } }); })();