Froogaloop Vimeo API - не может вызывать методы API вне Ready Event

Я изучил документы в SO и Vimeo и не могу понять, как вызвать метод API вне Ready Event в Vimeo. Я создал свой проигрыватель Vimeo, встроив его в teacher.js:

    $(".video-player").prepend('<iframe id="player" src="//player.vimeo.com/video/'+video_id+'?api=1&player_id=player&badge=0&title=0&byline=0&portrait=0" width="100%" height="100%" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>');

    player = $('iframe#player')[0];
    vimeoSetup(player);

Который затем вызывает vimeoSetup в другом скрипте:

function vimeoSetup (player) {
$f(player).addEvent('ready', ready);

  function addEvent(element, eventName, callback) {
    if (element.addEventListener) {
      element.addEventListener(eventName, callback, false);
    }
    else {
      element.attachEvent('on'+eventName, callback);
    }
  }

  function ready(player_id) {
    // Keep a reference to Froogaloop for this player
    container = document.getElementById(player_id).parentNode.parentNode;
    froogaloop = $f(player_id);    
    var buttons = container.querySelector('div#video-player-controls-holder-teacher div'),
    playBtn = document.querySelector('#play-pause');

   //play-pause -- I wanted to have a single play-pause button, which is working fine
    addEvent(playBtn, 'click', function() {
      froogaloop.api('paused', function(paused) {
        if(paused) {
            froogaloop.api('play');
        } else {
            froogaloop.api('pause');
        }
      });
    });
    ...

Теперь, если я хочу сказать, звоните $f(player).api('pause'); в teacher.js я получаю эту ошибку: Невозможно отправить сообщение на http://player.vimeo.com/. Получатель имеет происхождение mydomain. Кажется, это такая простая проблема - я не уверен, включает ли это использование "this", которое в данный момент мне не подходит, или я неправильно встраиваю проигрыватель Vimeo - я получил много "no method".api для этого объекта "в экспериментах.

Конечная цель состоит в том, чтобы я мог создать проигрыватель vimeo, предоставить элементы управления (оба они хороши), а затем использовать API для вызова методов, которые передаются в магистраль, включая паузу, воспроизведение и время.

Есть ли другие события, кроме "щелчка" и пользовательских событий, которые я могу использовать? Как событие, которое говорит, что была вызвана другая функция? Кажется окольным... Мой взгляд на позвоночник выглядит так:

    pause: function () {
     this.player.pauseVideo(); //this is for a YouTube API which works great
     //I want to be able to similarly call something like froogaloop.api('pause');
    },

Большое спасибо -Stackru научил меня удивительному количеству.

1 ответ

Так что если 'ready' событие работает, тогда все должно быть правильно настроено. Но здесь есть одна возможная проблема.
В:

player = $('iframe#player')[0];
vimeoSetup(player);

Вы получаете Object по идентификатору 'player' а затем, в vimeoSetup(player); прохождение Object в $f(player) который работает.
Тем не менее, дальше код ready функция, которую вы передаете $f(player_id) просто idне Object, следовательно, API вызывает не работает.

Вам просто нужно получить Object снова player_id и передать его в $f()или сохранить player = $('iframe#player')[0]; как глобальный var и затем вызовите все методы API на нем (хотя это может быть не очень хорошим вариантом, если вы хотите создать что-то вроде нескольких динамически порождаемых игроков, каждый из которых имеет свои элементы управления, или если вы просто один из тех, кто боится глобальных переменных)

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