我有一个YouTube Javscript API的实现,在Chrome和Safari中运行良好,但在Firefox中则不然。是的,我正在网络服务器上执行此操作;)
在文档准备就绪时,我调用我的函数 showVideo();
这是所有相关代码:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<div id="ytplayer" class="youtubepromovideo"></div>
<script type="text/javascript">
function showVideo(){
var params = { allowScriptAccess: "always" };
swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid=ytplayer", "ytplayer", "400", "400", "8", null, null, params);
}
function onYouTubePlayerReady(playerId) {
console.log("player ready: "+playerId);
loadNewVideo();
}
function loadNewVideo() {
var id = 'jc8n44ddy9A';
var startSeconds = 0;
console.log("loading video");
ytplayer.loadVideoById(id, startSeconds);
}
</script>
在所有浏览器中,播放器都会显示,但在 Firefox 中,视频不会加载。我的日志在Firefox上显示"正在加载视频"消息,但之后没有任何其他反应。甚至没有错误。如果我尝试在加载所有内容后手动调用ytplayer.loadVideoById('jc8n44ddy9A', 0);
,则会收到错误ReferenceError: ytplayer is not defined
。
我意识到 ytplayer 并没有被我明确定义为变量,但我的猜测(?)是 YouTube API 这样做是因为它可以在其他浏览器中工作。此外,如果我只在某处全局定义var ytplayer
,它不会修复它。
任何建议都非常感谢!
不确定其他浏览器从哪里获得ytplayer
引用,但您应该全局定义它(无论如何,对于您给出的示例)并在onYouTubePlayerReady
中添加对它的引用:
ytplayer = document.getElementById( playerId );
您可能最好使用iframe播放器,以便在没有Flash的浏览器中获得支持。 我相信可以使用"控件"参数在没有控件的情况下加载它。