seekTo()不是YouTube iframe API错误的功能

时间:2017-04-04 20:03:49

标签: javascript wordpress iframe youtube youtube-api

我正在使用Wordpress插件添加视频的时间戳链接,以便在特定时间范围内自动搜索视频。

Javascript:

        function onYouTubeIframeAPIReady(){

    console.log('Confirmation of call to onYouTubeIframeAPIReady()');

    var STT = {
        settings: STTSettings,
        media: undefined,
        skipTo: undefined,
        isHTML5: false,
        isYoutube: true,

        doHTML5Skip: function() {
            STT.media.removeEventListener('canplaythrough', STT.doHTML5Skip);
            STT.media.currentTime = STT.skipTo;
            STT.media.play();
        },

        doYoutubeSkip: function() {

            STT.media.seekTo(STT.skipTo);
            STT.media.playVideo();
        }

    };




    STTSkipTo = function(time) {
        var audio       = document.getElementsByTagName('audio'),
            video       = document.getElementsByTagName('video'),
            iframe      = document.getElementsByTagName('iframe'),
            timeArray   = time.split(':').reverse(),
            seconds     = parseInt(timeArray[0]),
            minutes     = timeArray.length > 1 ? parseInt(timeArray[1]) : 0,
            hours       = timeArray.length > 2 ? parseInt(timeArray[2]) : 0;

        STT.skipTo = seconds + (minutes * 60) + (hours * 3600);

        if (STT.media) {
            console.log(STT.media.seekTo);
            STT.doSkip();

            return;
        }

        if ((parseInt(STT.settings.link_audio) && audio.length) ||
            (parseInt(STT.settings.link_video) && video.length))
        {
            STT.doSkip = STT.doHTML5Skip;

            if (parseInt(STT.settings.link_audio) && audio.length) {
                STT.media = audio[0];
            } else {
                STT.media = video[0];
            }

            STT.media.addEventListener('canplaythrough', STT.doHTML5Skip);
            STT.media.load();
            STT.media.play();
            return;
        } else if (parseInt(STT.settings.link_youtube && iframe.length)) {
            // Inspect the iframes, looking for a src with youtube in the URI
            for (var i = 0; i < iframe.length; i++) {
                if (iframe[i].src.search('youtube') !== -1) {
                    // Set up the JS interface
                    STT.doSkip = STT.doYoutubeSkip;

                    iframe[0].id = 'stt-youtube-player';
                    STT.media = new YT.Player('stt-youtube-player', {
                        events: {
                            onReady: STT.doYoutubeSkip
                        }
                    });
                    return;
                }
            }
        }

        console.log('Skip to Timestamp: No media player found!');
        return;
    }

    }

在我的本地主机上,该插件可以无缝运行,但在我的托管网站上,我在堆栈中收到以下错误:

  

未捕获的TypeError:STT.media.seekTo不是函数   enter image description here

我认为由于某种原因,该网站无法加载www-widgetapi.js,这是YouTube iframe API的依赖项,因此无法生成所需的函数定义。但是,我确实尝试在标题中手动包含脚本,但它仍然无法正常工作。

如果有人知道任何其他wordpress插件,请建议。

1 个答案:

答案 0 :(得分:1)

根据此documentation,您需要同时设置player.seekTo(seconds:Number, allowSeekAhead:Boolean)的两个参数。

  

寻找视频中的指定时间。如果在调用该功能时播放器暂停,它将保持暂停状态。如果从其他状态(playingvideo cued等)调用该功能,则播放器将播放该视频。

  • seconds参数标识玩家应该前进的时间。

    除非玩家已经下载了用户正在寻找的视频部分,否则玩家将在此之前前进到最近的关键帧。

  • allowSeekAhead参数确定如果seconds参数指定当前缓冲的视频数据之外的时间,播放器是否会向服务器发出新请求。

应该是:Player.seekTo(120, true)//120 seconds