javascript - YouTube 嵌入视频在动态更新 iframe src 时停止播放

标签 javascript jquery youtube youtube-api youtube-javascript-api

我正在使用 iframe 标记在网页上加载一些视频。

<iframe id="player" type="text/html" width="640" height="280" src="https://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1" frameborder="0">
</iframe>

最初,我提供了一个虚拟网址 -“https://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1”作为 iframe 标记的 src 属性,我用它来嵌入 YouTube 视频。我通过创建两个单独的函数将视频加载和视频播放功能分开。这是因为我在单击链接时对视频进行排队,并且仅在启用某些设置时才播放它。

function playOnClick() {
  player.playVideo();                                                                                                                                                                            
}

function loadOnClick(videoId, videoURL) {

  // videoURL contains the url of video in the following format - https://www.youtube.com/watch?v=videoID

  /*
  videoURL = videoURL.replace(/watch\?v\=/, 'embed/');                                                                                                                                                     
  videoURL += '?enablejsapi=1';                                                                                                                                                                            
  jQuery('#player').attr('src', videoURL);                                                                                                                                                                 
  */

  player.cueVideoById(videoId);
}

上面的代码工作正常。但是,如果我取消注释动态更新 iframe src 属性的注释部分,则 src 会更新,视频也会排队,但无法播放。

此外,当我在没有虚拟 src 属性的情况下尝试上面的代码(取消注释部分的注释后)时,它会抛出这样的错误消息 -

Uncaught TypeError: Object # has no method 'loadVideoById'

我猜这可能是因为它无法识别enablejsapi设置为true。

更新 iframe 的 src 属性并使代码正常工作而不向 iframe 标记提供虚拟 src 的最佳方法是什么?

提前致谢!

最佳答案

这是预期的行为;如果您在 API 外部更改 iframe src,则会破坏 API 创建的绑定(bind)。解决此问题的最佳方法是根本不创建 iframe,而是让 API 为您完成此操作(您只需创建空标签,然后为每个 div 创建一个 YT.Player 对象...并且将注入(inject) DOM 节点您已经绑定(bind)到 iframe API。有关如何将空的 ID 传递给构造函数的示例,请参阅 https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player,然后始终使用 loadVideoById 来更改视频。

话虽如此,如果您更愿意手动创建 iframe,但是,如果您拥有的代码(已注释掉 jquery)有效,您可以这样做......是否有令人信服的理由jquery手动更改src属性(当cueVideoById已经以编程方式执行此操作时)?

关于javascript - YouTube 嵌入视频在动态更新 iframe src 时停止播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26340590/

相关文章:

javascript - 检查 TinyMCE 内容编辑器并删除底部换行符

php - simplexml_load_file 403 禁止

php - 无法在实时服务器中发布富文本编辑器内容?

javascript - 使用平面数组过滤 JSON 对象

javascript - 我可以在 jquery 中使用带有 .submit 的回调吗

javascript - 隐藏父 div 溢出时滚动不起作用

JavaScript 语法澄清

javascript - 使用 jQuery 匹配表单元格类和索引

php - PHP正则表达式查找第一个youtube链接

video - YouTube数据API-如何获取刚上传的视频的URL?