Как внедрить JavaScript-скрипт перед тегом </body>

Я хочу изменить стиль видео в Discourse. Как встроить JavaScript-скрипт перед тегом </body>?

Пытался редактировать его в HEAD, но это работает не совсем корректно!

Спасибо!

      <script src="/plyr.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const player = new Plyr('video');
        });
    </script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Video Player</title>
    <link rel="stylesheet" href="https://cdn.plyr.io/3.6.12/plyr.css">
    <script src="https://cdn.plyr.io/3.6.12/plyr.js"></script>
</head>
<body>
    <video controls>
        <source src="your-video.mp4" type="video/mp4">
    </video>


    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const player = new Plyr('video');
        });
    </script>
</body>
</html>

Где вы это меняете? В компоненте темы, который вы создали в UX? (Не знаю, что это за изображение.)

Скорее всего, вы не добавили это доменное имя в политику CSP.

И если честно, я рекомендую вам скопировать этот JS-файл напрямую и поместить его в тег <script>, чтобы предотвратить загрузку JS с внешнего сайта. Это небезопасно — если только вы полностью не доверяете этому сайту.

Главная проблема в этой строке, с остальным всё в порядке

    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const player = new Plyr('video');
        });
    </script>
</body>

Можно размещать только в конце body — это необходимо для инициализации плеера после полной загрузки страницы.

Вы можете использовать API плагинов Discourse.

<script type="text/discourse-plugin" version="0.8">
api.decorateCookedElement((elem, helper) => {
    const player = new Plyr('video');
}, {id: "beauitfy-video"})
</script>

А, значит, нужно загружать только один раз? Тогда делайте вид, что я этого не говорил.

А, значит, нужно загрузить только один раз? Тогда делайте вид, что я этого не говорил.

Это не имеет никакого значения. Разве у вас нет eventListener?

Это не имеет никакого значения. Разве у вас нет eventListener?

:sweat_smile: Не понимаю, как это сделать. Нужно разместить перед body.

Проверил, понял. Добавьте это в этом месте