Я пытаюсь найти плагин или функцию в JavaScript, jQuery или даже PHP, если необходимо, проверять каждые 10 секунд, если файл страницы был обновлен, и оповещает () пользователя, если страница была обновлена.
Спасибо заранее 🙂 Извините, если я недостаточно ясен. Комментарий, если у вас есть какие-либо вопросы.
EDIT: Другими словами, используя скрипты на стороне клиента или сервера, отправьте запрос AJAX на сервер и определите, была ли изменена текущая страница пользователем на сервере и отобразилось предупреждение.
Вы можете отправлять запрос http HEAD на сервер каждые 10 секунд. Это заставит сервер просто отправлять заголовки, а не контент. Затем вы можете записать заголовок ответа «Last-Modified».
Функция jQuery $.ajax();
поддерживает аналогичную функциональность. Но вместо проверки HTTP-заголовка Last-Modified
jQquery отправляет запросы на сервер, используя заголовок http If-Modified-Since
. Затем он проверяет, отвечает ли сервер с кодом ответа 304 Not Modified.
Это короткий пример HTML + Javascript, описывающий функциональность jQuery:
<html> <head> <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script> <script type="text/javascript"> var checkUrl="test.txt"; var firstCheck = false; window.setInterval(checkForUpdate, 1000); function checkForUpdate() { $.ajax(checkUrl, { ifModified : true, type : 'HEAD', success : function (response) { if(firstCheck === false) { firstCheck = true; return; } $('#output').html('the site has been modified'); } }); } </script> </head> <body> <div id="output">Not Modified</div> </body> </html>
Однако приведенный выше пример jquery не работал для меня – с помощью jQuery 1.8 и firefox. (Linux) + веб-сервер apache2. Функция успеха будет вызываться, хотя сервер отвечает 304 Not Modified.
Поэтому я добавлю еще один рабочий пример, который реализует мое первое предложение выше, вот часть javascript:
var checkUrl="test.txt"; window.setInterval("checkForUpdate()", 1000); var pageLoad = new Date().getTime(); function checkForUpdate() { $.ajax(checkUrl, { type : 'HEAD', success : function (response, status, xhr) { if(firstCheck === false) { firstCheck = true; return; } // if the server omits the 'Last-Modified' header // the following line will return 0. meaning that // has not updated. you may refine this behaviour... var lastModified = new Date(xhr.getResponseHeader('Last-Modified')) .getTime(); if(lastModified > pageLoad) { $('#output').html('the site has been modified'); } } }); }