В разделе Администрирование > Настроить > Темы > в секции заголовка я добавил следующий код, но получаю ошибку:
Uncaught ReferenceError: $ is not defined
(Но даже в этом случае имейте в виду, что Discourse — это SPA PWA, поэтому могут возникать условия гонки, если вы полагаетесь на то, что определенные элементы уже отрисованы. Решение этой проблемы — использование компонентов Ember, рендеримых в конкретных плагин-выходах, в сочетании с модификаторами).
Спасибо, но этот JavaScript отлично работает при выполнении в консоли разработчика: document.querySelector('.topic-list .topic-excerpt[href="/t/urltobechanged/8"]').setAttribute('href', "/t/newurltoset/17");
Однако при загрузке через заголовок Discourse возникает ошибка «Uncaught TypeError: document.querySelector(…) is null», независимо от того, оборачиваю ли я его в:
Поскольку Discourse — это SPA, полагаться на событие “DOMContentLoaded” документа не очень полезно, так как DOM документа всегда “загружен”, но элементы могут отсутствовать. Вместо этого, как упомянул @merefield, лучше использовать компоненты или что-то вроде этого: How do you force a script to refire on every page load in Discourse? - #5 by simon. Таким образом, при каждом изменении страницы ваш код сможет проверять наличие элемента, который вы пытаетесь изменить.