Показывать оповещение при изменении изображения на веб-сайте

#javascript #html #local-storage

#javascript #HTML #локальное хранилище

Вопрос:

У меня есть сайт GitHub pages с изображением на нем. Я пытаюсь, чтобы веб-страница показывала предупреждение всякий раз, когда я нажимаю на изменение на веб-сайте.

До сих пор мой подход заключался в реализации функции автоматического обновления:

 setTimeout(function(){ location.reload(); }, 60000);
  

Это будет автоматически обновляться каждую минуту, фиксируя все изменения, которые я делаю. Однако мне нужно показывать оповещение всякий раз, когда изменяется содержимое страницы. Важно иметь в виду, что содержимое не будет меняться при каждом обновлении — возможно, только каждые 10 минут (когда я нажимаю на изменения).

Я думаю, что способ сделать это — сохранить имя изображения, а затем посмотреть, меняется ли имя изображения при каждом обновлении — и если имя действительно изменилось, то показать оповещение. Я читал о чем-то под названием localStorage, но я не уверен, как подойти к сохранению имени файла — я вроде как новичок в JS / HTML.

Является ли использование localStorage наилучшим подходом к этой проблеме? Какие есть другие альтернативы / простые способы реализовать это на странице GitHub?

Заранее спасибо.

Ответ №1:

Если я четко понимаю, что вам нужно реализовать, я бы посоветовал вам прочитать о MutationObserver на JavaScript. Этот класс отслеживает все изменения, которые вносятся в привязанный элемент. Вот код и рабочая демонстрация:

 <html>
<body>
<p>
Some content
</p>
</body>

<script>
// select the target node
var element = document.getElementsByTagName('p')[0];

// create an observer instance
var observer = new MutationObserver(function(mutations) {
  alert("Some changes were made");
});

// configuration of the observer:
var config = { childList: true}; // ,subtree: true, characterData: true 

// pass in the target node, as well as the observer options
observer.observe(element, config);

setInterval(function () { // here you can make your changes programatically
element.innerHTML  = "New content";
}, 2000)
</script>
</html>
  

Ответ №2:

Вы также можете использовать cookies, то есть сохранять в cookie последнюю «версию» чего бы то ни было — где «version» может быть строкой, числом и т.д.

Преимущество этого в том, что оно также отправляется на сервер, поэтому вы можете сгенерировать макет / код оповещения непосредственно на сервере.

Проверьте https://github.com/js-cookie/js-cookie для скрипта, упрощающего это.

Другой альтернативой является реализация на сервере скрипта, который отвечает, изменилось ли содержимое. Что-то вроде http://foo.bar/changed?lastVer=XXXX , которое может возвращать JSON, подобный {changed:true,message:'We have changed the change'} . Вы могли бы получить это через ie. jQuery.getJSON() или ванильный XMLHttpRequest , и если это так, покажите сообщение пользователю, а затем перезагрузите страницу. Но для этого потребовалось бы где-нибудь создать исполняемый серверный скрипт.

Третьим вариантом было бы загрузить страницу, скажем, в скрытый IFRAME, проверить, изменилось ли изображение или содержимое, и если да, перенести только изображение — или определенную часть содержимого — на главную страницу, не обновляя его. Или, может быть, обновить его. Идея состоит в том, чтобы загрузить страницу в IFRAME и определить там, изменилось ли что-то.