2013-01-13 141 views
8

我有一個加載了YouTube視頻的iframe的頁面(iframe的src在運行時被修改)。 我基於碼由羅布W的不同的答案提供關於此主題的Youtube Iframe:onYouTubePlayerAPIReady()not called

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

然後,當iframe中裝入此代碼被執行:

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

被調用的函數dispose_ytplayer()是:

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

但第二次警報(「調用onYouTubePlayerAPIReady」)從未被調用,並且我的chrome console.log顯示此錯誤消息從WWW-embed_core_module-vflNmuGQq.js:26

不安全JavaScript嘗試與URL http://mysite.com從幀訪問幀與URL http://www.youtube.com/embed/nOEw9iiopwI?enablejsapi=1。域,協議和端口必須匹配。

任何想法?

回答

20

onYouTubePlayerAPIReady應該在window對象上。

嘗試:

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

它工作,太棒了!謝謝! – jenjis

+0

你救了我的一天....謝謝你! –

+0

你是一個拯救生命的人,謝謝! –

0

好像你沒有正確關閉該功能關閉。

最後的}正在關閉onYouTubePlayerAPIReady()而不是dispose_ytplayer()

固定碼:

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

感謝您的快速響應,但原始代碼是正確的,我犯了一個錯誤與剪切/複製,對不起:) – jenjis