Meistens tritt dieser Fehler “$ is not defined” auf, weil jQuery nicht geladen ist. Sollten die Header-Skripte jedoch standardmäßig ausgeführt werden, nachdem jQuery geladen wurde?
Danke, aber wenn dies JavaScript ist, funktioniert es einwandfrei, wenn es in der Entwicklerkonsole verwendet wird document.querySelector('.topic-list .topic-excerpt[href="/t/urltobechanged/8"]').setAttribute('href', "/t/newurltoset/17");
Irgendwie, wenn es aus dem Discourse-Header geladen wird, wird es als „Uncaught TypeError: document.querySelector(…) is null“ zurückgegeben, egal ob ich es mit umschließe:
function doSomething() {
or
document.addEventListener("DOMContentLoaded", function(event)
Irgendeine Idee, wie diese einzelne Zeile zum Ändern des href-Attributs ausgeführt werden sollte, da sie in der Entwicklerkonsole einwandfrei funktioniert?
Da Discourse eine SPA ist, ist das Verlassen auf das Dokument „DOMContentLoaded“ nicht sehr hilfreich, da das Dokument-DOM immer „geladen“ ist, aber die Elemente fehlen können. Stattdessen sollten Sie Komponenten verwenden, wie @merefield erwähnt hat, oder etwas wie dieses: How do you force a script to refire on every page load in Discourse? - #5 by simon. Auf diese Weise kann Ihr Code jedes Mal, wenn sich die Seite ändert, nach dem Element suchen, das Sie ändern möchten.
Alles klar, ich verstehe jetzt, dass Sie denken, das Hinzufügen von JS zum Header würde genauso funktionieren wie bei der Entwicklung von WordPress/Joomla.