Olá boa tarde! Só pra entender um problema estranho com escopo a situação seria a seguinte: Tenho um projeto javascript e quero usar dentro dele a API do iframe do youtube. Porém acontece algo estranho com o escopo desta API e ela fica fora do escopo e não consigo usar ela dentro por exemplo de alguma função. Veja o exemplo abaixo ao tentar usar dentro de uma função mesmo se eu passar variáveis por parametros não funciona. Sabe explicar porque este problema de escopo acontece, já que posso passar por parâmetros até mesmo a var global window e porque não consigo passar o escopo desta API para dentro de uma função para usar em projetos variados? Segue um exemplo com a API e abaixo uma função auto executável onde não está sendo possível usar o escopo/API. Obrigado pela atenção.
<!doctype html>
<html lang="en">
<head>
</head>
<body>
<div id="player"></div>
<script type="text/javascript">
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player; //<iframe width="1920" height="1080" src="https://www.youtube.com/embed/k7IPr-rhrPE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
function onYouTubeIframeAPIReady () {
player = new YT.Player('player', {
width: '682',
height: '383',
videoId: 'k7IPr-rhrPE',
playerVars: {
'controls' : 0,
'modestbranding' : 1,
'rel' : 0,
'showinfo' : 0,
},
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
var ready = false;
function onPlayerReady(event) {
ready = true;
}
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
// Video playing
} else {
//Video has paused
}
}
function stopVideo() {
player.stopVideo();
}
function playVideo() {
if(ready) player.playVideo();
else setTimeout(function(){ playVideo() },1000);
}
//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-
(function (w) {
//AQUI DENTRO API NÃO FUNCIONA
})(window);
</script>
</body>
</html>