Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Youtube Iframe: onYouTubePlayerAPIReady() not called

I have a page with an iframe which load a youtube video (the src of iframe is modified in runtime). I based on code by Rob W provided in different answers on this topic

<iframe id="browser" class="browser" scrolling="no" name="navigation"  
src="http://www.youtube.com/embed/nOEw9iiopwI?enablejsapi=1" application="youtube" style="display:  
inline;"></iframe>

Then, when iframe is loaded this code is executed:

$('.browser').load(function() {
dispose_ytplayer();
});

the called function dispose_ytplayer() is:

function dispose_ytplayer() {
    (function(){
    var s = document.createElement("script");
    s.src = "http://www.youtube.com/player_api";
    var before = document.getElementsByTagName("script")[0];
    before.parentNode.insertBefore(s, before);
     })();

    alert('called yt_dispose');

    var ytIframeplayer;

    function onYouTubePlayerAPIReady() {
        alert('called onYouTubePlayerAPIReady');
        ytIframeplayer = new YT.Player('browser', {
             events: {
                "onStateChange": stopCycle
             }
        });
    }
}

but the second alert ("called onYouTubePlayerAPIReady") is never called, and my chrome console.log shows this error message from www-embed_core_module-vflNmuGQq.js:26 :

Unsafe JavaScript attempt to access frame with URL http://mysite.com from frame with URL http://www.youtube.com/embed/nOEw9iiopwI?enablejsapi=1. Domains, protocols and ports must match.

Any ideas?

like image 600
jenjis Avatar asked Jan 13 '13 13:01

jenjis


People also ask

How do I unMute an iframe video?

Until and unless you have allow="autoplay;" in your iframe tag you wont be able to unmute the video. Add this attribute and further unMute function will work. Save this answer.

How do I pause an iframe video?

Click either the play or pause button, which is part of the iframe's parent page, to see it initiate play/pause of the video in the iframe player.


1 Answers

onYouTubePlayerAPIReady should be on the window object.

try:

window.onYouTubePlayerAPIReady = function() {
        alert('called onYouTubePlayerAPIReady');
        ytIframeplayer = new YT.Player('browser', {
             events: {
                "onStateChange": stopCycle
             }
    });
}
like image 161
CD.. Avatar answered Nov 13 '22 05:11

CD..