【问题标题】:seekTo() is not a function YouTube iframe API errorseekTo() 不是函数 YouTube iframe API 错误
【发布时间】:2017-08-30 05:02:59
【问题描述】:

我正在使用 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;
    }

    }

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

未捕获的类型错误:STT.media.seekTo 不是函数

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

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

【问题讨论】:

    标签: javascript wordpress iframe youtube youtube-api


    【解决方案1】:

    基于这个documentation,你需要同时设置player.seekTo(seconds:Number, allowSeekAhead:Boolean)的两个参数。

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

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

      除非播放器已经下载了用户正在寻找的视频部分,否则播放器将前进到该时间之前最近的关键帧。

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 2013-01-05
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2017-09-26
      相关资源
      最近更新 更多