Principalmente questo errore $ is not defined si verifica perché jQuery non è caricato, tuttavia gli script dell’header non dovrebbero essere eseguiti per impostazione predefinita dopo il caricamento di jQuery?h.
Grazie, ma se questo è javascript, funziona bene quando viene utilizzato nella console dello sviluppatore document.querySelector('.topic-list .topic-excerpt[href="/t/urltobechanged/8"]').setAttribute('href', "/t/newurltoset/17");
In qualche modo, quando viene caricato dall’header di Discourse, viene restituito come “Uncaught TypeError: document.querySelector(…) is null”, non importa se lo incapsulo con:
function doSomething() {
or
document.addEventListener("DOMContentLoaded", function(event)
Qualche idea su come questa singola riga per cambiare l’attributo href dovrebbe essere eseguita, dato che funziona bene nella console del browser?
Poiché Discourse è una SPA, fare affidamento sull’evento “DOMContentLoaded” del documento non sarà molto utile, poiché il DOM del documento è sempre “caricato” ma gli elementi potrebbero mancare. Invece, dovrai usare i Componenti come menzionato da @merefield, o qualcosa di simile a questo: How do you force a script to refire on every page load in Discourse? - #5 by simon. In questo modo, ogni volta che la pagina cambia, il tuo codice può controllare l’elemento che stai cercando di modificare.