【发布时间】:2012-05-23 10:22:33
【问题描述】:
我有以下代码,这是使用他们的 Javascript API 在我的页面中跟踪嵌入的 Youtube 视频所必需的:
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);
}
(与 Youtube API 相关的细节并不重要,但如果你好奇,它们在我之前的问题中 Youtube Javascript API: not working in IE)。
现在,我的问题是 onYoutubePlayerReady() 函数声明了“youtubeplayer”,它是对 DOM 对象的引用,我也需要从另一个函数 onytplayerstateChange() 访问该变量......但是“youtubeplayer”被声明为局部变量。这适用于 IE 8、Safari...,但不适用于 Firefox 12。当然,我可以通过以下方式获得对“youtubeplayer”的引用,而不使用“var”:
youtubeplayer = document.getElementById('youtubeplayer');
事实上,这就是它在 Youtube 的示例代码中的样子,但是如果我这样写,代码在 IE 8 中不起作用(而它在 Firefox 12 中起作用;有关更多详细信息,请参阅我之前的问题)。
...所有这些都让我想到:有没有办法从函数内部声明一个全局变量(如上面的“youtubeplayer”),以便其他函数也可以访问它?适用于所有浏览器的东西?
【问题讨论】:
-
你为什么不在函数外声明你的变量?
-
为什么不在函数外声明变量?因为 Youtube 的 API 不允许我这样做。它的结构方式是,当加载视频播放器对象时,它会调用一个名为“onYouTubePlayerReady()”的回调函数,它会设置其他所有内容。
-
感谢您提供另一个问题的链接,顺便说一句。我从那里得到了很好的想法,我会尽快进行测试。
标签: javascript dom youtube-api