Я разрабатываю приложение Rails4, которое сможет вставлять и воспроизводить видео, размещенные на Youtube, на страницах моего приложения. Мне нужно подключиться к некоторым событиям видеоплеера, поэтому я создаю объект Youtube с помощью вызова API:
<script id="video_script" ></script>
<div id="player"></div>
<%= javascript_tag do %>
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var scriptTag = $("script#video_script");
scriptTag.parent()[0].insertBefore(tag, scriptTag[0]);
var youtube_player;
function onYouTubeIframeAPIReady() {
youtube_player = new YT.Player('player', {
videoId: <%= @video.id %>,
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerReady(event) {
....
}
function onPlayerStateChange(event) {
....
}
<% end %>
Это отлично работает, когда страница загружается впервые, но не работает, когда пользователь перемещается между страницами с включенными турбоссылками, поскольку событие готовности документа не срабатывает, и, следовательно, код Youtube не знает, чтобы выполнить обратный вызов для onYouTubeIframeAPIReady()
.
Итак, мне было интересно, есть ли обходной путь, который заставил бы API Youtube вызывать метод API Ready для события page:change
, чтобы заставить его работать с турбоссылками, в дополнение к событию document.ready
? Я пытался копаться в скрипте API, который загружается с Youtube, но не смог найти там ничего, что могло бы решить проблему, и я также немного не решаюсь запускать локальную версию скрипта Youtube.