Javascript 如何检测YouTube视频是否已使用其iFrame API删除

Javascript 如何检测YouTube视频是否已使用其iFrame API删除,javascript,iframe,youtube,youtube-api,Javascript,Iframe,Youtube,Youtube Api,是否可以使用iframeapi检测视频是否已被删除或在Youtube上不再可用 以下代码将检测youtube iframe的更改,但我能找到的唯一远程关闭的数据点是-3,这意味着未启动,但这也适用于任何工作视频 var tag=document.createElement('script'); tag.id='yt script'; tag.src=https://www.youtube.com/iframe_api'; var firstScriptTag=document.getElem

是否可以使用iframeapi检测视频是否已被删除或在Youtube上不再可用

以下代码将检测youtube iframe的更改,但我能找到的唯一远程关闭的数据点是
-3
,这意味着未启动,但这也适用于任何工作视频


var tag=document.createElement('script');
tag.id='yt script';
tag.src=https://www.youtube.com/iframe_api';
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
log(“加载的yt脚本”);
var播放器;
函数onyoutubeiframeapiredy(){
player=新的YT.player('YT-iframe'{
活动:{
“onReady”:onPlayerReady,
“onStateChange”:onPlayerStateChange
}
});
}
函数onPlayerReady(事件){
console.log(“视频播放器就绪”);
}
函数onPlayerStateChange(事件){
console.log(事件数据);
}

设置一个
onError
事件处理程序并检查
event.data==100
。描述了所有播放机错误事件。

在播放视频之前,您可以通过检查视频的持续时间来检测,如果视频的持续时间为
0
秒,则极有可能被删除/无法播放

<iframe id="yt-iframe" width="630" height="354" src="http://www.youtube.com/embed/tPEE9ZwTmy0?enablejsapi=1" frameborder="0" allowfullscreen=""></iframe>

<script type="text/javascript">
    var tag = document.createElement('script');
    tag.id = 'yt-script';
    tag.src = 'https://www.youtube.com/iframe_api';
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    console.log('YT scripts loaded');
    var player;
    function onYouTubeIframeAPIReady() {
        player = new YT.Player('yt-iframe', {
            events: {
                'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange
            }
        });
    }

    function onPlayerReady(event) {
        console.log('Video player ready');
        if (event.target.getDuration() <= 0) {
            console.log('Video likely to be removed');
        }
    }

    function onPlayerStateChange(event) {
        console.log(event.data);
    }
</script>

var tag=document.createElement('script');
tag.id='yt script';
tag.src=https://www.youtube.com/iframe_api';
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
log(“加载的YT脚本”);
var播放器;
函数onyoutubeiframeapiredy(){
player=新的YT.player('YT-iframe'{
活动:{
“onReady”:onPlayerReady,
“onStateChange”:onPlayerStateChange
}
});
}
函数onPlayerReady(事件){
console.log(“视频播放器就绪”);

if(event.target.getDuration()不,至少不简单。

我可以在
onError
上添加一个事件监听器,但这只会在用户按下视频播放时触发……有没有一种方法可以在播放器加载时检测到这一点?我不这么认为,没有。当你点击播放器时,它会向YouTube本身发送一个请求,以获取视频信息。只有这样才能检测到播放器知道视频已被删除,然后让您的应用程序知道。在显示iframe之前知道这一点的唯一方法是直接使用官方的YouTube API。
<iframe id="yt-iframe" width="630" height="354" src="http://www.youtube.com/embed/tPEE9ZwTmy0?enablejsapi=1" frameborder="0" allowfullscreen=""></iframe>

<script type="text/javascript">
    var tag = document.createElement('script');
    tag.id = 'yt-script';
    tag.src = 'https://www.youtube.com/iframe_api';
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    console.log('YT scripts loaded');
    var player;
    function onYouTubeIframeAPIReady() {
        player = new YT.Player('yt-iframe', {
            events: {
                'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange
            }
        });
    }

    function onPlayerReady(event) {
        console.log('Video player ready');
        if (event.target.getDuration() <= 0) {
            console.log('Video likely to be removed');
        }
    }

    function onPlayerStateChange(event) {
        console.log(event.data);
    }
</script>