Génération de titres de page et événement page:changed

Cette question s’enfonce dans les détails techniques de l’API.

J’utilise une version modifiée (fork) du remarquable composant de thème Matomo. Cela permet de suivre les visites de pages avec Matomo. Ma version modifiée est une tentative de contourner certains problèmes. Elle est essentiellement identique. Le comportement décrit ci-dessous se produit également avec le composant d’origine.

Le composant utilise le callback onPageChange pour configurer une API ou un service Matomo.

Le problème que je rencontre est que, parfois, le callback onPageChange est déclenché avant que le titre de la page ne soit généré. Ce comportement est incohérent. Parfois, le titre est complètement formé, parfois non.

Il en résulte que l’historique des journaux Matomo contient un mélange de titres de pages complets et incomplets.

En examinant le code source de Discourse, cela est appelé avant le déclencheur page:changed :

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

Tout cela semble devoir fonctionner — le titre devrait être actualisé au moment où onPageChange est appelé. Ce n’est pas le cas, du moins pas de manière cohérente.

Il y a un autre problème qui pourrait être lié. onPageChange est parfois appelé deux fois. Voici mon contournement (et la motivation de ma version modifiée) :

Dans le cas où onPageChange est appelé deux fois pour la même visite de page, l’une des deux appels fournit un argument url différent de l’emplacement actuel de la fenêtre. Je vérifie cela et je sors tôt.

(Notez que je gère l’événement page:changed via onAppEvent plutôt que onPageChange, mais je constate le même comportement dans les deux cas.)

J’ai testé pour voir si le titre était défini avec le code suivant :

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

Ce que je constate, c’est que si je crée un nouveau sujet, le titre du sujet n’est pas défini lors de l’appel à api.onPageChange qui est effectué immédiatement après la création du sujet. Dans ce cas, c’est le titre du site qui est utilisé à la place. Cela semble-t-il correspondre à ce qui se passe sur votre site ? Si vous ne voyez aucun titre, assurez-vous d’avoir rempli les paramètres de site title et site description. Ces paramètres se trouvent dans l’onglet « Requis » de votre page de paramètres du site.

Merci de t’être penché là-dessus, Simon. Ce n’est pas ce que je constate. J’ai préparé un enregistrement d’écran et je t’enverrai un lien en dehors du canal habituel, ainsi qu’une référence à la source du composant de thème en jeu.

L’essentiel, c’est que les titres ne sont pas affichés lors d’un appel initial à un sujet depuis une application déjà chargée. Sur une page d’entrée (c’est-à-dire la première fois que l’application est chargée), je vois le titre dans onPageChanged, ainsi que sur toutes les pages suivantes. L’enregistrement devrait rendre les choses beaucoup plus claires, j’espère :slight_smile: