จะตรวจสอบได้อย่างไรว่าวิดีโอ youtube เล่นจบแล้ว?


93

ฉันกำลังทำงานบนไซต์ที่มีวิดีโอ YouTube ฝังอยู่มากมายลูกค้าต้องการแสดงป๊อปอัปเมื่อใดก็ตามที่วิดีโอหยุดเล่น

ฉันดูที่ youtube api และดูเหมือนว่าจะมีวิธีตรวจจับเมื่อวิดีโอจบลง:

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

แต่ฉันไม่สามารถฝังวิดีโออย่างที่กล่าวถึงในหน้านั้นได้เนื่องจากวิดีโอทั้งหมดอยู่บนไซต์แล้ว (หลายพันรายการที่ถูกเพิ่มด้วยตนเองโดยการวางโค้ดสำหรับฝัง)

มีวิธีตรวจจับตอนจบของวิดีโอเหล่านี้โดยไม่เปลี่ยนวิดีโอที่มีอยู่ (โดยใช้จาวาสคริปต์) หรือไม่


2
enablejsapi=1สิ่งเดียวที่ฉันจะแนะนำคือโปรแกรมการเปลี่ยนแปลงรายการฝังที่จะรวม หากอยู่ในฐานข้อมูลควรเปลี่ยนsrcแอตทริบิวต์ได้ง่าย คุณอาจต้องใช้ regex หากมีการแทรกลงในไฟล์ HTML แบบคงที่
ดาวน์โหลด

คำตอบ:


175

สามารถทำได้ผ่าน youtube player API:

http://jsfiddle.net/7Gznb/

ตัวอย่างการทำงาน:

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

1
คุณรวมสิ่งนี้เข้ากับวิดีโอหลายรายการในหน้าเดียวได้อย่างไร
motoxer4533

@ motoxer4533 ดีฉันไม่จำเป็นต้องจัดการกับวิดีโอหลายรายการในหน้าเดียวกัน แต่มีเพียงหนึ่งรายการต่อหน้า ไม่แน่ใจว่า API อนุญาตให้สร้างผู้เล่นหลายคนและตรวจพบจุดสิ้นสุดของแต่ละคนหรือไม่
TK123

1
ไม่ควรยากที่จะตั้งค่าสำหรับผู้เล่นหลายคน - เพียงแค่ตั้งค่า var player1 หลายตัว, var player2, var player 3 ฯลฯ จากนั้นเรียกใช้รหัสการตั้งค่าหลาย ๆ ครั้ง - ด้วย var ใหม่
codeguy

ดูตัวอย่างการทำสิ่งที่คล้ายกันโดยใช้ iframe api ได้ที่นี่developers.google.com/youtube/…
JeremyWeir

3
เพื่อความสะดวกในการอ่านฉันขอแนะนำให้ YT.PlayerState สิ้นสุดเมื่อตรวจสอบสถานะ
Bart Burg

-7

สิ่งที่คุณอาจต้องทำคือใส่สคริปต์ในทุกหน้าที่ทำสิ่งต่อไปนี้ ... 1. ค้นหา youtube-iframe: ค้นหาตามความกว้างและความสูงตามชื่อเรื่องหรือค้นหา www.youtube.com ในแหล่งที่มา คุณสามารถทำได้โดย ... - วนลูปผ่าน window.frames โดย for-in loop แล้วกรองตามคุณสมบัติ

  1. ฉีด jscript ใน iframe ของหน้าปัจจุบันโดยเพิ่ม onYoutubePlayerReady must-include-function http://shazwazza.com/post/Injecting-JavaScript-into-other-frames.aspx

  2. เพิ่มผู้ฟังเหตุการณ์ ฯลฯ ..

หวังว่านี่จะช่วยได้


1
ไม่แน่ใจว่าเป็นไปได้หรือไม่เนื่องจากกฎข้ามโดเมน
Asher Garland
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.