【发布时间】:2017-09-11 15:26:57
【问题描述】:
我正在合并使用 YouTube iFrame API 和通过设置了 defer 标志的脚本标签加载的 jQuery。必须设置 defer 标志,因为客户拥有完美的 Google 页面洞察分数并希望保持该分数。
YouTube API 在完全加载并准备好使用后,立即调用我定义的函数onYouTubeIframeAPIReady。然后它会在播放器完全加载和渲染后调用onPlayerReady。
我希望在此函数中使用 jQuery,但仅在 onPlayerReady 函数中使用 jQuery 会产生竞争条件(希望在调用 onPlayerReady 时 jQuery 库已完成加载)。
我想到一个可行的解决方案是使用 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
};
【问题讨论】:
-
不,没有这样的事件。但是,您可以通过 javascript 附加脚本标记并监听其事件。
标签: javascript jquery