我遇到以下代码的问题,但我不确定问题出在哪里.
在我的母版页上,在javascript中,我有一个数组,用于保存YouTubePlayer我创建的对象列表.我还在这里加载了YouTube API.
我还有(有时几个)YouTube用户控件,其中包含引导模式中的YouTube div.它还包含一个JavaScript,用于将新YouTubePlayer对象推送到母版页js中的数组.最后,在用户控件上,我定义了在bootstrap模式的"显示"和"隐藏"事件上自动启动和停止视频的方法.
最后,为了(希望)解决正在加载的文档和正在加载的YouTube API之间的竞争条件,我设置了两个bool变量(一个用于文档,一个用于API),并在调用initVideos函数之前检查两者是否为true,迭代通过YouTubePlayer对象数组并初始化它们,YT.Player在窗口中设置对象.我认为,部分问题是我无法静态设置window.player1等,因为我从来不知道将加载多少YouTube用户控件.
问题是,每当引导模式的事件发生火灾,YT.Player我从窗口检索对象不包含方法playVideo()和pauseVideo().
在我的母版页面上:
$(document).ready(function () {
window.docReady = true;
if (window.apiReady)
initVideos();
});
function onYouTubeIframeAPIReady() {
window.apiReady = true;
if (window.docReady)
initVideos();
initVideos();
}
function initVideos() {
if (typeof ytPlayerList === 'undefined')
return;
for (var i = 0; i < ytPlayerList.length; i++) {
var player = ytPlayerList[i];
var pl = new YT.Player(player.DivId, {
playerVars: {
'autoplay': '0',
'controls': …Run Code Online (Sandbox Code Playgroud) 我一直在试图让一个相当简单的YouTube api集成在FF/IE中工作并且到目前为止没有运气.
这听起来像是一个范围问题或者在玩家初始化之前进行的调用,但我尝试过的一切都表明它不是这两件事之一.另外值得注意的是,一切都在(仅)Chrome中完美运行.
// Async api load per YT documentation...
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// Declare player and set basic functions...
var player
playVideo = function() { player.playVideo(); }
stopVideo = function() { player.stopVideo(); }
// YT Api ready function...
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
videoId: "TkJcg4bmAYs",
events: {
'onStateChange': onPlayerStateChange
}
});
// After player object created, bind popup function to page anchors...
var popup = $('#video-popup') …Run Code Online (Sandbox Code Playgroud)