2016-06-11 61 views
0

這是我HTML文件中的工作播放器。我希望YT.PlayerState.ENDED也可以引用一個存儲視頻ID的客戶端Javascript對象(booth),但booth未定義。做這樣的事情的正確方法是什麼?YouTube iframe API - 從onPlayerStateChange事件處理程序中引用Javascript對象

function onPlayerStateChange(event) { 
    if (event.data == -1) { 
    player.playVideo(); 
    } 
    if (event.data == 0) { 
    alert("This alert pops up"); 
    alert(window.booth); 
    // Undefined -- even though "booth" is already instantiated in linked JS file 

    /* 
    window.booth.cue.index++; 
    event.target.loadVideoById(window.booth.cue.list[booth.cue.index].id); 
    */ 
    } 
} 

這裏是整個Javascript file - 線16 socket.on('boothCreated'...就是booth被實例化後,才創建的球員處理器 - 所以它似乎對我來說,玩家應該能參考這一點。

+0

你能提供鏈接的JS文件嗎?瀏覽器從不錯。 – Azamantes

+0

@Azamantes,我只是標記你,如果你沒有注意到我添加了JS文件。 – aweeeezy

回答

1

我不需要看任何進一步,鏈接JS文件的開頭說的一切:

window.onload = function() { // beginning of function closure 
    var user = null; // these are private variables inside the function 
    var booth = null; // these are private variables inside the function 
    // etc... 

如果你想這些變量從window.booth可見等,那麼你需要做的:

window.onload = function() { // beginning of function closure 
    window.user = null; // these are now public 
    window.booth = null; // these are now public 
    // etc... 

你只是把它們變成私人的,因此在'外部世界'中是看不見的。

或者,如果您想在保持私密的同時使用它們,那麼您需要以某種方式加入文件並將onPlayerStateChange函數放入window.onload = function() { ...

+0

謝謝 - 你真棒!我很尷尬,我不知道這樣的初級JS事情。 – aweeeezy

+0

別擔心,我們都在那裏:) – Azamantes

相關問題