我正在开发一个 Rails4 应用程序,它将能够在我的应用程序页面中嵌入和播放托管在 Youtube 上的视频。我需要挂钩一些视频播放器的事件,所以我通过 API 调用创建 Youtube 对象:
<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 %>
这在第一次加载页面时效果很好,但是当用户在启用了 turbolinks 的页面之间导航时不起作用,因为文档就绪事件不会触发,因此 Youtube 代码不知道发出回调到onYouTubeIframeAPIReady()
.
所以,我想知道除了事件之外,是否有任何解决方法可以让 Youtube API 为page:change
事件调用 API Ready 方法以使其与 turbolinks 一起使用document.ready
?我已经尝试挖掘从 Youtube 下载的 api 脚本,但在其中找不到任何可以解决问题的东西,而且我也有点犹豫要运行 Youtube 脚本的本地版本。