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 на нем (хотя это может быть не очень хорошим вариантом, если вы хотите создать что-то вроде нескольких динамически порождаемых игроков, каждый из которых имеет свои элементы управления, или если вы просто один из тех, кто боится глобальных переменных)