Iframe YouTube API loadVideoById startSeconds不工作
我为嵌入的一些youtube视频创建了一个章节选择器。这种方法过去是有效的,但最近停止了。我不知道发生了什么事 我使用他们推荐的格式,但使用loadVideoById来显示每个章节Iframe YouTube API loadVideoById startSeconds不工作,iframe,youtube,youtube-api,Iframe,Youtube,Youtube Api,我为嵌入的一些youtube视频创建了一个章节选择器。这种方法过去是有效的,但最近停止了。我不知道发生了什么事 我使用他们推荐的格式,但使用loadVideoById来显示每个章节 <div class="wrapper"> <div id="player"></div> <script type="text/javascript"> var tag = document.createElement('script'); tag.sr
<div class="wrapper">
<div id="player"></div>
<script type="text/javascript">
var tag = document.createElement('script');
tag.src = "http://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
width: '625',
videoId: 'FE5jN0rqMtM',
events: {
'onStateChange': onPlayerStateChange
},
playerVars:{
rel: 0,
wmode: "opaque"
}
});
}
function onPlayerStateChange(evt) {
if (evt.data == 0) {
$('#video_popup').removeClass('hide_pop');
$('#video_popup').addClass('display_pop');
}
else if (evt.data == -1) {
$('#video_popup').removeClass('display_pop');
$('#video_popup').addClass('hide_pop');
}
else {
$('#video_popup').removeClass('display_pop');
$('#video_popup').addClass('hide_pop');
}
}
function chapter1() {
player.loadVideoById({'videoId': 'FE5jN0rqMtM', 'startSeconds': 0});
}
function chapter2() {
player.loadVideoById({'videoId': 'FE5jN0rqMtM', 'startSeconds': 63});
}
function chapter3() {
player.loadVideoById({'videoId': 'FE5jN0rqMtM', 'startSeconds': 135});
}
</script>
<div id="video_popup" class="hide_pop">
<div class="video_layover">
<div class="promo">Thank you for watching!<br /><br /></div>
<div class="link"><a href="javascript: chapter1();">Replay Video</a></div>
</div>
</div>
<div style="margin: 0 auto 20px auto; width:625px; height:98px; text-align:center;">
<ul class="player">
<a href="javascript: chapter1();"><li>Chapter 1</li></a>
<a href="javascript: chapter2();"><li>Chapter 2</li></a>
<a href="javascript: chapter3();"><li>Chapter 3</li></a>
</ul>
</div>
var tag=document.createElement('script');
tag.src=”http://www.youtube.com/iframe_api";
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
var播放器;
函数onyoutubeiframeapiredy(){
player=新的YT.player('player'{
宽度:'625',
videoId:'FE5jN0rqMtM',
活动:{
“onStateChange”:onPlayerStateChange
},
playerVars:{
rel:0,
wmode:“不透明”
}
});
}
函数onPlayerStateChange(evt){
如果(evt.data==0){
$('video_popup')。removeClass('hide_pop');
$('video_pop').addClass('display_pop');
}
else if(evt.data==-1){
$('video_pop')。removeClass('display_pop');
$('video_popup').addClass('hide_pop');
}
否则{
$('video_pop')。removeClass('display_pop');
$('video_popup').addClass('hide_pop');
}
}
函数第1章(){
loadVideoById({'videoId':'FE5jN0rqMtM','startSeconds':0});
}
函数第2章(){
loadVideoById({'videoId':'FE5jN0rqMtM','startSeconds':63});
}
函数第3章(){
loadVideoById({'videoId':'FE5jN0rqMtM','startSeconds':135});
}
谢谢收看!
我猜这是一个bug,尽管我没有找到它的文档。如果你愿意,你可以 不管怎样,我认为
cueVideoById
是一种更好的方法,适用于所有浏览器:
例如:
如果遇到类似“TypeError:ytPlayer.loadVideoById不是函数”的错误, 那么我相信你必须等待onReady事件启动 以下是我使用的示例代码(部分):
在调用loadVideoById之前,需要确保var播放器已准备就绪
If(player != null)
{
loadVideoById。。
}当我点击每一章时,它对我来说都很好。它没有重新开始。您在哪个浏览器中查看它?我在我的家用电脑上又试了一次,但在Chrome 28.0.1500.95、FF 22.0或FF 23.0中都不起作用。我在Mac上使用的是28.0.1500.95版本,它可以工作。我在Firefox中尝试过,但遇到了与上述相同的问题。奇怪,这个错误已经修复了,但对我来说仍然不起作用。。正在传递对象参数或列表参数。。。有什么线索吗?谜团加深了。我将您的修复复制并应用到我的测试页面,但它不起作用,但当我将HTML复制到jsbin时,它确实起作用。那么jsbin和我的测试页面之间有什么不同呢?代码完全相同。我会报告API错误:我周五报告了它。希望我能从他们那里听到一些关于这个问题的消息,很可能我不会。这个错误的任何结果-你能发布错误链接吗?我的现在可以了,我已经发布了一条消息,说这个错误已经解决了,但是一个mod删除了它。。。
var ytPlayer;
var ytPlayerIsReady = false;
// this methods only works if defined in the global scope !!
window.onYouTubeIframeAPIReady = function () {
ytPlayer = new YT.Player('ytplayer', {
playerVars: {
enablejsapi: 1,
controls: 0,
fs: 1,
autoplay: 1,
rel: 0,
showinfo: 0,
modestbranding: 1
},
events: {
onReady: onReady,
onError: onError,
onStateChange: onStateChange
}
});
};
// youtube code for calling the iframe api
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
function onError(event) {
console.log("error with code" + event.data);
}
function onStateChange(event) {
console.log("change state to " + event.data);
}
function onReady(event) {
ytPlayerIsReady = true;
console.log("I'm ready");
}
window.myVideoPlayer = {
init: function (options) {
// some arbitrary code...
// the trick is to fire options.callback,
// which contains all the logic needed
function timeout() {
setTimeout(function () {
if (false === ytPlayerIsReady) {
timeout();
}
else {
if (options.callback) {
options.callback();
}
}
}, 1000);
}
timeout();
}
};
myVideoPlayer.init({
callback: function(){
// now the youtube api is ready, you should be able to call
// loadVideoById without problems (at least it worked for me)
// ytPlayer.removeEventListener('onStateChange');
// ytPlayer.addEventListener('onStateChange', '_myYtPlayerOnChange');
// ytPlayer.loadVideoById({
// videoId: 'xxxx',
// startSeconds: 12
// });
}
});
If(player != null)