Этот вопрос касается деталей реализации API.
Я использую форк отличного компонента темы Matomo. Это позволяет отслеживать просмотры страниц с помощью Matomo. Мой форк — попытка обойти проблемы. По сути, он идентичен оригиналу. Описанное ниже поведение наблюдается и в исходном компоненте.
Компонент использует обратный вызов onPageChange для настройки API/функциональности Matomo.
Проблема, с которой я сталкиваюсь, заключается в том, что в некоторых случаях обратный вызов onPageChange срабатывает до формирования заголовка страницы. Это происходит нестабильно: иногда заголовок полностью сформирован, а иногда — нет.
В результате история логов Matomo содержит смесь полностью сформированных заголовков страниц и незавершённых.
Изучив исходный код Discourse, я обнаружил, что это происходит до срабатывания триггера page:changed:
Всё выглядит так, будто должно работать — заголовок должен обновиться к моменту вызова onPageChange. Но этого не происходит — по крайней мере, не стабильно.
Есть ещё одна проблема, которая может быть связана. onPageChange иногда вызывается дважды. Это мой обходной путь (и причина создания форка):
В случае, когда onPageChange вызывается дважды для одного и того же просмотра страницы, один из двух вызовов предоставляет аргумент url, отличный от текущего расположения окна. Я проверяю это и досрочно завершаю выполнение.
(Обратите внимание, что я обрабатываю событие page:changed через onAppEvent, а не через onPageChange, но наблюдаю такое же поведение в обоих случаях.)