我正在合并使用YouTube iFrame API和通过设置了defer标志的脚本标签加载的jQuery。必须设置defer标志,因为客户拥有完美的Google页面洞察得分,并希望保持这个得分。
YouTube API在完全加载并准备好使用后,立即调用我定义的函数onYouTubeIframeAPIReady。随后,在播放器完全加载和渲染时,它将调用onPlayerReady。
我希望在这个函数中使用jQuery,但仅仅在onPlayerReady函数内部使用jQuery将会创建竞态条件(希望jQuery库在调用onPlayerReady时已经完成加载)。
我想到了一种可行的解决方案是在onPlayerReady函数中设置一个变量,然后调用一个测试播放器和jQuery的函数。另一个函数在jQuery准备就绪时设置一个变量并调用相同的测试函数。
我有一些能够工作的代码,但检查jQuery的部分对我来说似乎有点混乱,并且还引入了一些不必要的额外延迟。我想知道是否有更好的方法在jQuery变为可用时立即运行某些内容。基本上,jQuery本身是否内置了回调来检测其可用性?
我的当前代码如下:
YouTube API在完全加载并准备好使用后,立即调用我定义的函数onYouTubeIframeAPIReady。随后,在播放器完全加载和渲染时,它将调用onPlayerReady。
我希望在这个函数中使用jQuery,但仅仅在onPlayerReady函数内部使用jQuery将会创建竞态条件(希望jQuery库在调用onPlayerReady时已经完成加载)。
我想到了一种可行的解决方案是在onPlayerReady函数中设置一个变量,然后调用一个测试播放器和jQuery的函数。另一个函数在jQuery准备就绪时设置一个变量并调用相同的测试函数。
我有一些能够工作的代码,但检查jQuery的部分对我来说似乎有点混乱,并且还引入了一些不必要的额外延迟。我想知道是否有更好的方法在jQuery变为可用时立即运行某些内容。基本上,jQuery本身是否内置了回调来检测其可用性?
我的当前代码如下:
var ready = {
'jquery': false,
'youtube' false
},
testJQueryLoaded;
testJQueryLoaded = function() {
if(typeof jQuery == 'undefined') {
window.setTimeout(function() {
testJQueryLoaded();
}, 25);
return;
}
ready.jquery = true;
postLibraryLoad();
};
testJQueryLoaded();
function onYouTubeIframeAPIReady() {
// Stuff
};
function onPlayerReady() {
ready.youtube = true;
postLibraryLoad();
};
function postLibraryLoad() {
if(!ready.jquery || !ready.youtube) {
return;
}
// More stuff
};