Измените атрибут src на vimeo iframe после того, как он был загружен с API

Я не уверен, позволяет ли API vimeo это:

У меня есть этот HTML-код:

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

И у меня есть этот код JavaScript, используя froogaloop.js из Vimeo:

  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'); после этого все работает. Но после того, как я изменил атрибут src в iframe через JavaScript, вызовы vmPlayer.api() ничего не делают. Похоже, что он теряет ссылку на игрока как-то. Вот как я изменяю атрибут src через jQuery:

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

1 ответ

Решение

Я не знаю, если это поможет, но попробуйте использовать .prop() функция вместо attr. Это может помочь перезагрузить. Другое дело, что вы можете использовать обратный вызов события в iframes, чтобы определить, когда оно загружено. Поскольку вы вызываете функцию API непосредственно после сброса src, она, вероятно, не загружена. Я считаю, что функция для этого $('#vm-player').load(function(e) { vmPlayer.api('play'); });

Если эта функция загрузки не работает, это потому, что известно, что загрузка jQuery срабатывает дважды. Один раз на пустом, и один раз на истинной окончательной загрузке. Если это так, и это вызывает проблемы для вас, вам, возможно, придется перейти к некоторой обработке окна JS. Возможно, так, но НИКАКИХ гарантов document.getElementById('iFrameID').contentWindow.onload(function() {vmPlayer.api('play');});

Другие вопросы по тегам