Wie man JavaScript-Skript vor dem Tag "< / body >" einbettet

Ich möchte einen Stil für Videos in Discourse ändern. Wie kann ich ein JavaScript-Skript vor dem </body>-Tag einbetten?

Ich habe versucht, es im HEAD zu bearbeiten, aber es funktioniert nicht perfekt!

Danke!

      <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>

Wo ändern Sie es? In einer Theme-Komponente, die Sie in der UX erstellt haben? (Ich weiß nicht, was dieses Bild ist.)

Dies liegt höchstwahrscheinlich daran, dass Sie diesen Domainnamen nicht zur CSP-Richtlinie hinzugefügt haben.

Und ehrlich gesagt, empfehle ich Ihnen, diese JS-Datei direkt zu kopieren und in das <script>-Tag einzufügen, um zu verhindern, dass Benutzer JS von einer externen Website laden. Dies ist nicht sicher – es sei denn, Sie vertrauen dieser Website vollständig.

1 „Gefällt mir“

Nur dieser Satz ist das Problem, die vorherigen sind kein Problem

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

Kann nur am Ende von body platziert werden, dies ist, um den Player zu initialisieren, nachdem die Seite geladen wurde.

Sie können die discourse plugin-api verwenden.
You can use the discourse plugin api.

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

Ah, Sie müssen es nur einmal laden? Dann tun Sie so, als hätte ich es nicht gesagt.
Ah, you only need to load once? Then pretend I didn’t say it

Das macht keinen Unterschied. Haben Sie keinen Event-Listener?
It makes no difference. Don’t you have an eventListener?

:sweat_smile: Ich verstehe nicht, wie das geht. Es muss vor dem Body platziert werden.

Ich habe nachgeschaut und es verstanden. Füge es hier ein.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.