Wie erkenne ich, wann ein YouTube-Video fertig abgespielt wird?

92

Ich arbeite an einer Website mit einer Menge eingebetteter YouTube-Videos. Der Client möchte ein Popup anzeigen, wenn ein Video nicht mehr abgespielt wird.

Ich habe mir die YouTube-API angesehen und es scheint eine Möglichkeit zu geben, zu erkennen, wann ein Video endet:

http://code.google.com/apis/youtube/js_api_reference.html

Ich kann die Videos jedoch nicht wie auf dieser Seite erwähnt einbetten, da sich alle Videos bereits auf der Website befinden (Tausende, die manuell durch Einfügen von Einbettungscode hinzugefügt wurden).

Gibt es eine Möglichkeit, das Ende dieser Videos zu erkennen, ohne eines der vorhandenen Videos zu ändern (mithilfe von Javascript)?

TK123
quelle
2
Das einzige, was ich vorschlagen könnte, ist das programmgesteuerte Ändern der Einbettungseinträge, um sie einzuschließen enablejsapi=1. Wenn sie sich in einer Datenbank befinden, sollte es ziemlich einfach sein, das srcAttribut zu ändern . Möglicherweise benötigen Sie einen regulären Ausdruck, wenn diese statisch in HTML-Dateien eingefügt werden.
Download

Antworten:

173

Dies kann über die YouTube-Player-API erfolgen:

http://jsfiddle.net/7Gznb/

Arbeitsbeispiel:

    <div id="player"></div>

    <script src="http://www.youtube.com/player_api"></script>

    <script>

        // create youtube player
        var player;
        function onYouTubePlayerAPIReady() {
            player = new YT.Player('player', {
              width: '640',
              height: '390',
              videoId: '0Bmhjf0rKe8',
              events: {
                onReady: onPlayerReady,
                onStateChange: onPlayerStateChange
              }
            });
        }

        // autoplay video
        function onPlayerReady(event) {
            event.target.playVideo();
        }

        // when video ends
        function onPlayerStateChange(event) {        
            if(event.data === 0) {          
                alert('done');
            }
        }

    </script>
TK123
quelle
1
Wie haben Sie dies in mehrere Videos auf einer Seite integriert?
Motoxer4533
@ motoxer4533 Nun, ich musste mich nicht mit mehreren Videos auf derselben Seite befassen, sondern nur mit einem pro Seite. Nicht sicher, ob die API die Erstellung mehrerer Player und die Erkennung ihrer einzelnen Endpunkte ermöglicht.
TK123
1
sollte nicht schwer für mehrere Spieler einzurichten sein - einfach mehrere var player1, var player2, var player 3 usw. einrichten und dann den Setup-Code mehrmals ausführen - mit jedem neuen var
codeguy
Auch ein vollständiges Beispiel dafür, wie man mit der iframe-API etwas Ähnliches macht. Developers.google.com/youtube/…
JeremyWeir
3
Zur besseren Lesbarkeit würde ich YT.PlayerState.ENDED empfehlen, wenn Sie den Status überprüfen.
Bart Burg
-6

Möglicherweise möchten Sie auf allen Seiten ein Skript einfügen, das Folgendes ausführt: 1. Suchen Sie den YouTube-Iframe: Suchen Sie nach Breite und Höhe nach Titel oder suchen Sie in der Quelle nach www.youtube.com. Sie können dies tun, indem Sie ... - die window.frames durch eine For-In-Schleife durchlaufen und dann nach den Eigenschaften herausfiltern

  1. Fügen Sie jscript in den Iframe der aktuellen Seite ein und fügen Sie die onYoutubePlayerReady-Must-Include-Funktion http://shazwazza.com/post/Injecting-JavaScript-into-other-frames.aspx hinzu

  2. Fügen Sie die Ereignis-Listener usw. hinzu.

Hoffe das hilft

yshouman
quelle
1
Ich bin mir nicht sicher, ob dies aufgrund domänenübergreifender Regeln möglich ist
Asher Garland,