2013-01-13 11 views
8

Mam stronę z ramką iframe, która ładuje wideo z youtube (src iframe jest modyfikowany w środowisku wykonawczym). I na podstawie kodu przez Roba W dostarczone w różnych odpowiedzi na ten tematYoutube Iframe: onYouTubePlayerAPIReady() nie nazywane

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

Potem, kiedy iframe jest załadowany ten kod jest wykonywany:

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

się dispose_ytplayer nazywa function() jest:

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 
      } 
     }); 
    } 
} 

ale drugi alert ("o nazwie onYouTubePlayerAPIReady") nigdy nie jest wywoływany, a moja konsola chrome.log pokazuje ten komunikat o błędzie z -www-embed_core_module vflNmuGQq.js: 26:

Niebezpieczne JavaScript próba dostępu ramkę z adresem URL http://mysite.com z ramą z URL http://www.youtube.com/embed/nOEw9iiopwI?enablejsapi=1. Domeny, protokoły i porty muszą się zgadzać.

Wszelkie pomysły?

Odpowiedz

20

onYouTubePlayerAPIReady powinien znajdować się na obiekcie window.

try:

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

działa świetnie! Dzięki! – jenjis

+0

uratowałeś mój dzień ... dzięki! –

+0

Jesteś oszczędzającym życie, dziękuję! –

0

Wydaje się, że nie jesteś zamykania funkcji off poprawnie.

Ostatni } jest zamykany onYouTubePlayerAPIReady(), a nie dispose_ytplayer().

kod Poprawiono:

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 
      } 
     }); 
    } 
} 
+0

dzięki za szybką odpowiedź, ale oryginalny kod jest poprawny, popełniłem błąd przy wycinaniu/kopiowaniu, przepraszam :) – jenjis