Показать сообщение отдельно
  #1 (permalink)  
Старый 11.12.2019, 02:19
Новичок на форуме
Отправить личное сообщение для vgiv Посмотреть профиль Найти все сообщения от vgiv
 
Регистрация: 09.11.2019
Сообщений: 3

MutationObserver и Single Page Application
Доброе время суток!

Первый вопрос на эту тему я задал вот тут, и попытался поступить согласно данному там совету. Перепробовал много вариантов, но чего-то по-прежнему не понимаю. Так как формулировка вопроса несколько изменилась, то я решил, что стоит начать новую тему.

Итак, я решаю задачу: написать расширение для Firefox, которое отслеживало бы смену координат фото на странице типа этой: https://pastvu.com/p/352624. Эти координаты содержаться в заголовке страницы и имеют примерно такой вид:

"geo":[59.382348,28.204023]


Так как страница при навигации меняется хитрым образом (произносились таинственные слова "Single Page Application", хотя я очень приблизительно понимаю, что это такое), то мне посоветовали использовать MutationObserver. Итак, я пишу такое тестовое расширение:

callback = function(mutationRecords) {
  for ( var mutationRecord of mutationRecords ) {
    // найти в заголовке страницы координаты фото
    var xy = document.head.textContent.match(/"geo":\[(.*?)]/);
    // и вывести их в консоль
    console.log( 'xy='+xy );
  }
}
var observer = new MutationObserver( callback );
observer.observe( document.head, {childList: true, subtree: true, attributes: true, characterData: true, characterDataOldValue: true, attributeOldValue: true} );


При каждом изменении заголовка координаты xy должны выводиться в консоль. Если я меняю фото (кликая по мини-карте справа), то заголовок (и xy), должны меняться. И действительно, если посмотреть код страницы после смены фото, то числа после "geo" меняются. Но, увы, в консоль выводятся прежние xy. Для того, чтобы изменились и они, нужно перезагрузить страницу.

Почему так происходит? Как расширению получить реальные текущие координаты фото?

Владимир.
Ответить с цитированием