Javascript ajouté à l'en-tête du thème renvoie $ n'est pas défini

Salut,

Dans Admin
uevo

Utilisez le JavaScript natif, pas jQuery.

2 « J'aime »

Merci, mais si c’est du javascript, cela fonctionne bien lorsqu’il est utilisé dans la console du développeur
document.querySelector('.topic-list .topic-excerpt[href="/t/urltobechanged/8"]').setAttribute('href', "/t/newurltoset/17");

D’une manière ou d’une autre, lorsqu’il est chargé à partir de l’en-tête du discourse, il est retourné comme “Uncaught TypeError: document.querySelector(…) is null”, peu importe si je l’encapsule avec :

function doSomething() {
or
document.addEventListener("DOMContentLoaded", function(event)

Avez-vous une idée de la façon dont cette seule ligne pour modifier l’attribut href devrait être exécutée, car elle fonctionne bien dans la console du développeur ?

Comme Discourse est une SPA, s’appuyer sur l’événement « DOMContentLoaded » du document ne sera pas très utile, car le DOM du document est toujours « chargé » mais les éléments peuvent être manquants. Vous voudrez plutôt utiliser les Composants comme l’a mentionné @merefield, ou quelque chose comme ceci : How do you force a script to refire on every page load in Discourse? - #5 by simon. De cette façon, chaque fois que la page change, votre code peut vérifier l’élément que vous essayez de modifier.

1 « J'aime »

D’accord, je comprends maintenant, venant du développement WordPress/Joomla, vous pensez que l’ajout de JS dans l’en-tête fonctionnerait de la même manière.

Votre lien fournit effectivement une solution, notez que les en-têtes <script type='text/discourse-plugin'> sont maintenant dépréciés Modernizing inline script tags for templates & JS API

Pour résoudre rapidement la situation de l’URL, j’ai fini par créer un permalien directement depuis l’administration de Discourse.

Merci pour votre soutien et vos explications !

1 « J'aime »