Javascript 如何动态更改Youtube播放器videoID

Javascript 如何动态更改Youtube播放器videoID,javascript,jquery,iframe,youtube-api,Javascript,Jquery,Iframe,Youtube Api,我想使用YT.Player代码以便检测事件。我有一个带有Youtube视频ID的CSV文件和一个将ID放入数组的函数,并且希望能够在用户单击图像时动态更改ID。基本上是这样的: html <!-- 1. The <iframe> (and video player) will replace this <div> tag. --> <div id="player"></div> 但这是非常有缺陷的,而且不支持跨浏览器。如果我使用标准的

我想使用YT.Player代码以便检测事件。我有一个带有Youtube视频ID的CSV文件和一个将ID放入数组的函数,并且希望能够在用户单击图像时动态更改ID。基本上是这样的:

html

<!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
<div id="player"></div>
但这是非常有缺陷的,而且不支持跨浏览器。如果我使用标准的IFRAME而不是ytplayerapi,那么一切都很好。但是我想检测结束、暂停等等,所以我必须使用API。我的猜测是,这是一个与状态有关的问题,在创建IFRAME的过程中,持久性在某些地方丢失了


注意。

使用JSAPI做这件事非常简单。当你想加载一个新视频时,只需调用
player.loadVideoById(videoId)详细信息在

以防这对任何像我一样挣扎的人都有帮助

这个
player.loadVideoById(videoId)
仅在videoId硬编码时对我有效,例如。
player.loadVideoById('sdfexxdfse')

当我试图将该值直接放入变量或存储在数组中时,即使它包含相同的信息,也无法工作

视频每次都出现不正确的参数

以这种方式将其添加到变量

var x=新字符串(variabledatahere)


完成了任务

你读过那本书吗?您可以使用在onyoutubeiframeapi中获得的player变量来进行api调用。请注意,这与iFrame api有关,因为“JavaScript api”现在已被弃用。@sheriffderek于2019年1月15日发布,我可以确认
player.loadVideoById(videoId)有效。这很难相信。
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

// 3. This function creates an <iframe> (and YouTube player)
//    after the API code downloads.
// NOTE: videoId is taken out and instead is placed as the generated IFRAME src from the postSelection function

var player;
function onYouTubeIframeAPIReady() {
   player = new YT.Player('player', {
      height: '100%',
      width: '100%',
      videoId: '<<CALL TO FUNCTION OR VARIABLE HERE>>',
      events: {
         //'onReady': onPlayerReady,
         'onStateChange': onPlayerStateChange
      }
   });
}
function postSelection() {
    $("#player").attr("src", _selected.attributes.url); //_selected.attributes.url comes from the CVS file
}