1

我不确定 vimeo API 是否允许这样做:

我有这个 html 代码:

  <iframe id="vm-player"
      src="http://player.vimeo.com/video/27855315?api=1&player_id=vm-player" 
      frameborder="0" 
      webkitAllowFullScreen mozallowfullscreen allowFullScreen>
  </iframe>

我使用来自 Vimeo 的 froogaloop.js 有这个 JavaScript 代码:

  var iframe = $('#vm-player')[0];
  var vmPlayer = $f(iframe);
  function ready(player_id) {
    // Keep a reference to Froogaloop for this player
    var vmPlayer = $f(player_id);
  }

  $(window).bind('ready', function() {
      //Attach the ready event to the iframe
      $f(document.getElementById('vm-player')).addEvent('ready', ready);
    });

当我vmPlayer.api('play');在此之后调用时,它可以工作。但是在我通过 JavaScript 更改 iframe 上的 src 属性后,vmPlayer.api() 调用没有做任何事情。看起来它以某种方式失去了对玩家的参考。这就是我通过 jQuery 更改 src 属性的方式:

  function playVmVideo(id) {
    $('#vm-player').attr('src',
                         'http://player.vimeo.com/video/'
                         + id + '?api=1&player_id=vm-player');
    vmPlayer.api('play');
  }
4

1 回答 1

3

我不知道这是否有帮助,但请尝试使用该.prop()函数而不是 attr。它可能有助于触发重新加载。另一件事,您可以在 iframe 上使用事件回调来检测它何时加载。由于你在重置src后直接调用api函数,它可能没有加载。我相信它的功能是$('#vm-player').load(function(e) { vmPlayer.api('play'); });

如果该加载函数不起作用,那是因为 jQuery 的加载已知会触发两次。一次是空的,一次是真正的最终负载。如果是这种情况并且给您带来了问题,您可能需要进行一些裸 js 窗口处理。可能像这样,但没有 garenteesdocument.getElementById('iFrameID').contentWindow.onload(function() {vmPlayer.api('play');});

于 2013-05-15T23:27:17.917 回答