YouTube API - nicht 'onYouTubePlayerReady()'

2010-01-17 6 views
16

Aus dem Brennen, was ich gelesen habe, ist dies, wie ich sollte Setup die YouTube API:YouTube API - nicht 'onYouTubePlayerReady()'

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta content='text/html;charset=UTF-8' http-equiv='content-type' /> 
    <title>Youtube Player</title> 
    <script src="jquery.js" type="text/javascript"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> 
    <script type="text/javascript" charset="utf-8"> 
     function onYouTubePlayerReady(id) { 
     console.log("onYouTubePlayerReady() Fired!"); 
     var player = $("#youtube_player").get(0); 
     } 

     var params = { allowScriptAccess: "always" }; 
     var atts = { id: "youtube_player" }; 
     swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1", 
         "youtube", "425", "356", "8", null, null, params, atts); 

    </script> 
    </head> 
    <body> 
    <div id="youtube"></div> 
    </body> 
</html> 

jedoch 'onYouTubePlayerReady()' überhaupt nicht schießen , und wenn ich manuell einen Verweis auf den Player erhalte, sind viele Methoden nicht definiert; Zum Beispiel funktioniert cueVideoById(), aber playVideo() nicht.

Wie kann ich dieses Problem beheben?

+0

Das ist es wahrscheinlich nicht, kann aber versuchen Sie das Dokument ein HTML 4 Doctype geben, anstatt die HTML 5 ein? Nur um diese Möglichkeit auszuschließen. –

+3

Und sind Sie auf einem Webserver mit diesem, wie in den Dokumenten angegeben? http://code.google.com/apis/youtube/js_api_reference.html –

+0

@Pekka: Nein, ich war nicht, bemerkte gerade, dass auf der API-Dokumentseite. Ich denke, ich muss in Zukunft mehr lesen. Danke :) –

Antwort

29

Sie müssen sich auf einen Web-Server mit Ihrem Testskript sein, wie in der documentation erklärte:

Hinweis: jeder dieser Anrufe Um zu testen, müssen Sie die Datei auf einem Webserver ausgeführt haben, wie die Flash Player beschränkt Anrufe zwischen lokalen Dateien und dem Internet.

1
<!DOCTYPE html> 

hatten die Seite, um die html5 Sachen für mich in FF4

4

Ich habe die Antwort, trennt diesen Teil des Skripts und steckt ihn in dem Kopf in seinem funktionieren führen eigenes Skript-Tag OMG, schließlich

<script type="text/javascript" language="javascript"> 
function onYouTubePlayerReady(playerid) { 
    ytp = document.getElementById('ytplayer'); 
    ytp.mute(); 
}; 
</script> 
+0

OMG vielen Dank! – Stpn

0

hatte nur das gleiche Problem, aber aus einem anderen Grund. Es funktionierte in Chrome, aber nicht in Firefox, und der Grund war, dass ich einen http-Header "Content-type: text/xml" anstelle von "Content-type: text/html" hatte. Als HTML wird jetzt auch das onYouTubePlayerReady-Ereignis in Firefox ausgelöst.

Wenn Sie dies nur für den Fall tun, dass jemand auf diese Antwort von Google stolpert (wie ich gerade bei dem Versuch, eine Lösung zu finden).

4

Ich halte dies für die beste Möglichkeit, ein Youtube-Video zu Ihrer Website mit Javascript hinzuzufügen. Es gibt Ihnen einen sehr klaren Umgang mit Ereignissen. Es funktioniert auf einem lokalen Computer, und soweit ich weiß, funktioniert es auf Apple-Geräten. Sie können alle in der javascript-Dokumentation für die youtube-API beschriebenen Ereignisse und Funktionen verwenden.

<div id="player"></div> 
<script> 
//Load player api asynchronously. 
var tag = document.createElement('script'); 
tag.src = "http://www.youtube.com/player_api"; 
var firstScriptTag = document.getElementsByTagName('script')[0]; 
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 
var done = false; 
var player; 
function onYouTubePlayerAPIReady() { 
    player = new YT.Player('player', { 
     height: '390', 
     width: '640', 
     videoId: 'JW5meKfy3fY', 
     events: { 
     'onReady': onPlayerReady, 
     'onStateChange': onPlayerStateChange 
     } 
    }); 
} 
function onPlayerReady(evt) { 
    evt.target.playVideo(); 
} 
function onPlayerStateChange(evt) { 
    if (evt.data == YT.PlayerState.PLAYING && !done) { 
     setTimeout(stopVideo, 6000); 
     done = true; 
    } 
} 
function stopVideo() { 
    player.stopVideo(); 
} 
</script> 

Quelle: http://apiblog.youtube.com/2011/01/introducing-javascript-player-api-for.html

5

diese Funktion:

function onYouTubePlayerReady(playerid) { 
    console.log('readyIn'); 
}; 

müssen nicht direkt in separaten Script-Tag in Kopf sein.

Nur Regel, die Sie behalten müssen, ist: setzen Sie diese Funktion nicht innerhalb des domready Ereignisses - es muss früher definiert werden.

Zum Beispiel in Mootools ich es wie folgt verwendet werden:

function onYouTubePlayerReady(playerid) { 
    echo('readyIn'); 
}; 

document.addEvent('domready', function() { 
    ... 
}); 
+0

Diese Antwort ist das Beste für mich – Macumbaomuerte

1

Wenn Sie so YouTube-Videos sind das Einbetten:

<iframe src="http://www.youtube.com/embed/VIDEO_ID?jsapi=1" width="1280" height="720" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe> 

dann sollten Sie

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

legen nach die </iframe >. So habe ich es wenigstens zum Laufen gebracht.

Wenn Sie das [src] -Attribut des iframe dynamisch über jQuery oder ein anderes Video ändern, müssen Sie nach dem Laden onYouTubePlayerAPIReady() aufrufen.

Ich ziehe das [src] Attribut zu ändern, und dann: setTimeout(onYouTubePlayerAPIReady, 500);

Verwandte Themen