Angular2罐';找不到名称';YT';即使在全局对象上定义
为了捕捉用户暂停youtube视频()的时间,我发现自己在Angular2中使用了onYouTubeIframeAPIReady回调方法 我遇到了与上述和类似的困难 我遵循了建议,最终使用了Angular2罐';找不到名称';YT';即使在全局对象上定义,angular,typescript,youtube-api,youtube-iframe-api,Angular,Typescript,Youtube Api,Youtube Iframe Api,为了捕捉用户暂停youtube视频()的时间,我发现自己在Angular2中使用了onYouTubeIframeAPIReady回调方法 我遇到了与上述和类似的困难 我遵循了建议,最终使用了(任何窗口)。onyoutubeiframeapiredy=function(){} 但是,在我的onYouTubeIframeAPIReady方法中,我有以下代码: function onYouTubeIframeAPIReady() { player = new YT.Player('video',
(任何窗口)。onyoutubeiframeapiredy=function(){}
但是,在我的onYouTubeIframeAPIReady方法中,我有以下代码:
function onYouTubeIframeAPIReady() {
player = new YT.Player('video', {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
我从我的typescript linter中得到以下错误:
类型为“{events:{'onReady':(event:any)=>void;'onStateChange':(event:any)=>void;};}”的参数不能分配给类型为“PlayerOptions”的参数
我的最低回购示例可在此处找到:
git clone https://github.com/Atticus29/dataJitsu.git
cd dataJitsu
git checkout stackoverflow
npm install
ng serve
使用
window['YT']
而不是YT
似乎可以解决这个问题:
ngOnInit() {
var player;
window['onYouTubeIframeAPIReady'] = function() {
player = new window['YT'].Player('video', {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerStateChange(event){
if (event.data == window['YT'].PlayerState.PAUSED) {
console.log(player.getCurrentTime());
}
}
function onPlayerReady(event) {
document.getElementById("pause").addEventListener("click", function() {
player.pauseVideo();
});
document.getElementById("play").addEventListener("click", function() {
player.playVideo();
});
}
if (!window['YT']){
var tag = document.createElement('script');
tag.src = "//www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
}
}
再次感谢,@Bertrand Martel!知道为什么会这样吗?window['YT']实际上是做什么的?