Я использую плагин, который назначает значения "пропустить" для отметок времени для встроенных видео YouTube. Скрипт отлично работает на любом браузере, кроме Chrome. При попытке использовать его в Chrome он возвращает:
Uncaught TypeError: STT.media.seekTo is not a function
at Object.doYoutubeSkip (skiptotimestamp.js:15)
at STTSkipTo (skiptotimestamp.js:33)
at HTMLDocument.<anonymous> (skiptotimestamp.js:86)
код:
var STT = {
settings: STTSettings,
media: undefined,
skipTo: undefined,
isHTML5: false,
isYoutube: false,
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) {
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];
}
var playbackRate = STT.media.playbackRate;
STT.media.addEventListener('canplaythrough', STT.doHTML5Skip);
STT.media.load();
STT.media.playbackRate = playbackRate;
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;
}
// Listen to all clicks on the document
document.addEventListener('click', function (event) {
var elem = event.target;
// If the event target doesn't match bail
if (!elem.hasAttribute('data-stt-time')) {
return;
}
var time = elem.getAttribute('data-stt-time');
STTSkipTo(time);
}, false);
Я не уверен, что это просто не загружает определения API YouTube в Chrome для playVideo () & seekTo () или они не синхронизируются с созданным плеером. Если у кого-то есть идеи, они будут очень благодарны. Попытка найти какое-либо понимание этого было очень трудным.