Генерация заголовков страниц и событие page:changed

Этот вопрос касается деталей реализации API.

Я использую форк отличного компонента темы Matomo. Это позволяет отслеживать просмотры страниц с помощью Matomo. Мой форк — попытка обойти проблемы. По сути, он идентичен оригиналу. Описанное ниже поведение наблюдается и в исходном компоненте.

Компонент использует обратный вызов onPageChange для настройки API/функциональности Matomo.

Проблема, с которой я сталкиваюсь, заключается в том, что в некоторых случаях обратный вызов onPageChange срабатывает до формирования заголовка страницы. Это происходит нестабильно: иногда заголовок полностью сформирован, а иногда — нет.

В результате история логов Matomo содержит смесь полностью сформированных заголовков страниц и незавершённых.

Изучив исходный код Discourse, я обнаружил, что это происходит до срабатывания триггера page:changed:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/page-tracker.js#L31

Всё выглядит так, будто должно работать — заголовок должен обновиться к моменту вызова onPageChange. Но этого не происходит — по крайней мере, не стабильно.

Есть ещё одна проблема, которая может быть связана. onPageChange иногда вызывается дважды. Это мой обходной путь (и причина создания форка):

В случае, когда onPageChange вызывается дважды для одного и того же просмотра страницы, один из двух вызовов предоставляет аргумент url, отличный от текущего расположения окна. Я проверяю это и досрочно завершаю выполнение.

(Обратите внимание, что я обрабатываю событие page:changed через onAppEvent, а не через onPageChange, но наблюдаю такое же поведение в обоих случаях.)

Я протестировал, устанавливается ли заголовок, используя следующий код:

<script type="text/discourse-plugin" version="0.2">
api.onPageChange((url, title) => {
    console.log('url', url);
    console.log('title', title)
})
</script>

Что я обнаружил: если я создаю новую тему, заголовок темы не устанавливается при вызове api.onPageChange, который происходит сразу после создания темы. В этом случае вместо него используется заголовок сайта. Похоже ли это на то, что происходит на вашем сайте? Если вы вообще не видите заголовка, убедитесь, что вы заполнили настройки сайта title и site description. Эти настройки находятся на вкладке «Required» (Обязательные) на странице настроек вашего сайта.

Спасибо, что разобрались в этом, Саймон. Я вижу не это. Я записал экран и отправлю вам ссылку отдельно, а также укажу на исходный код компонента темы, который используется.

Суть в том, что заголовки не отображаются при первом вызове темы из загруженного приложения. На странице входа (то есть при первой загрузке приложения) я вижу заголовок в onPageChanged, а также на любой странице после первой. Запись, надеюсь, проясняет это гораздо лучше :slight_smile: