Есть ли хороший способ добавить JavaScript (один файл, минифицированный) в компонент темы, чтобы его можно было использовать в common/header.html?
Сработало. Просто добавил JS (не минифицированный) в common/header.html.
См. discourse-highlight-text/common/header.html at master · sbernhard/discourse-highlight-text · GitHub
Хорошо бы, если кто-то задокументировал бы это поведение в руководстве для разработчиков тем и компонентов.
Как вы использовали JS в своём компоненте? Я использую компонент Versatile Banner и хочу добавить кнопку, которая вызывает мою пользовательскую JS-функцию. Я добавил код в head, как вы указали, но получаю ошибку CSP:
dev.londonbikers.com/:1 Отказано в выполнении обработчика событий inline, так как это нарушает следующую директиву Content Security Policy: "script-src https://dev.londonbikers.com/logs/ https://dev.londonbikers.com/sidekiq/ https://dev.londonbikers.com/mini-profiler-resources/ https://dev.londonbikers.com/assets/ https://dev.londonbikers.com/brotli_asset/ https://dev.londonbikers.com/extra-locales/ https://dev.londonbikers.com/highlight-js/ https://dev.londonbikers.com/javascripts/ https://dev.londonbikers.com/plugins/ https://dev.londonbikers.com/theme-javascripts/ https://dev.londonbikers.com/svg-sprite/". Для включения inline-выполнения требуется либо ключ 'unsafe-inline', либо хеш ('sha256-...'), либо nonce ('nonce-...').
Это происходит при вызове моего кода через onclick="NavigateToCustomLoginUrl('facebook')" на кнопке.
Кажется, я сам себе ответил на этот вопрос: Content security policy | Articles | web.dev
Проверьте loadScript в коде/метаданных, чтобы найти системный способ решения этой задачи.