У меня есть следующий код, необходимый для отслеживания встроенного Youtube видео в моей странице с использованием их Javascript API:Объявите глобальную переменную внутри функции
function onYouTubePlayerReady(playerId) {
var youtubeplayer = document.getElementById('youtubeplayer');
youtubeplayer.addEventListener("onStateChange", "onytplayerStateChange");
youtubeplayer.setPlaybackQuality('large');
}
function onytplayerStateChange(newState) {
//Make it autoplay on page load
if (newState == -1) {
youtubeplayer.playVideo();
}
var tiempo = youtubeplayer.getCurrentTime();
//Rounds to 2 decimals
var tiempo = Math.round(tiempo*100)/100;
alert(tiempo);
}
(деталей, относящихся к API Youtube не важно, но если вам интересно, они находятся на моем предыдущем вопросе Youtube Javascript API: not working in IE).
Теперь моя проблема в том, что функция onYoutubePlayerReady() объявляет «youtubeplayer», которая является ссылкой на объект DOM, и мне нужно получить доступ к этой переменной из другой функции onytplayerstateChange() тоже ... но «youtubeplayer "объявляется как локальная переменная. Это работает в IE 8, Safari ..., но не работает в Firefox 12. Конечно, я мог бы получить ссылку на «youtubeplayer» следующим образом вместо этого, без «вар»:
youtubeplayer = document.getElementById('youtubeplayer');
И на самом деле так выглядит код примера Youtube, но если я напишу его таким образом, код не будет работать в IE 8 (хотя он работает в Firefox 12, см. Мой предыдущий вопрос для получения дополнительной информации).
... Все это приводит меня к: есть способ объявить глобальную переменную изнутри функции (например, «youtubeplayer» выше), так что к ней могут быть доступны и другие функции? Что-то, что работает во всех браузерах?
Почему бы вам просто не объявить переменную вне функции? –
Возможный дубликат [определить глобальную переменную в функции javascript] (http://stackoverflow.com/questions/5786851/define-global-variable-in-javascript-function) –
Почему я не объявляю переменную вне функции? Потому что API Youtube меня не пускает. Как он структурирован, когда объект видеоплеера загружен, он вызывает функцию обратного вызова с именем «onYouTubePlayerReady()», которая устанавливает все остальное. – PaulJ