如何从 JSON 对象获取 Youtube vid ID

How to get the Youtube vid ID from a JSON object

本文关键字:Youtube vid ID 获取 对象 JSON      更新时间:2023-09-26

我想从我的JSON文件中获取youtube视频ID。将使用正则表达式函数提取 id。当我传入id作为youtube函数的参数时onYouTubeIframeAPIReady会收到一个错误:Uncaught TypeError: YT.Player is not a function

我的正则表达式函数:

regexVideoId: function(url) {
        var regExp = /^.*((youtu.be'/)|(v'/)|('/u'/'w'/)|(embed'/)|(watch'?))'??v?=?([^#'&'?]*).*/;
        var match = url.match(regExp);
        console.log(match[7]);
        onYouTubeIframeAPIReady(match[7]);
        // return (match&&match[7].length==11)? match[7] : false;
    },

优酷功能:

var player;
    function onYouTubeIframeAPIReady(id) {
        player = new YT.Player('youtube-video', {
            height: '390',
            width: '640',
            videoId: id,
            events: {
                'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange
            }
        });
    }

调用正则表达式函数并发送 youtube 网址:regexVideoId(data.youtube); 我使用Youtube Javascript API。正则表达式函数有效,它将从其 id 中提取视频。只有将video id传递给函数onYoutubeIframeAPIReady不起作用,并给我is not a function的错误。

我做错了什么?提前谢谢。

您没有提供足够的代码,因此这是一些猜测工作。

但是,问题似乎在于您直接调用onYouTubeIframeAPIReady,可能是在youtube API完全加载之前。(Youtube API 文档中提供的示例使用异步加载(

您可以通过反转逻辑来解决此问题。您不是在函数中显式调用onYouTubeIframeAPIReady regexVideoId而是让构造函数调用YT.Player regexVideoId函数:

function regexVideoId(url) {
    var regExp = /^.*((youtu.be'/)|(v'/)|('/u'/'w'/)|(embed'/)|(watch'?))'??v?=?([^#'&'?]*).*/;
    var match = url.match(regExp);
    return match[7];
}
//...
var player;
function onYouTubeIframeAPIReady() {
    player = new YT.Player('youtube-video', {
        height: '390',
        width: '640',
        videoId: videoId: regexVideoId(theUrl),
        events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
        }
    });
}

检查这个工作小提琴