API Vimeo Froogaloop не распознает событие
Я пытаюсь распознать событие onPlay, onPause и onFinish для vimeo, используя API-интерфейс froogaloop. Я пробовал все, что мог себе представить, и не везло.
Я получаю эту ошибку в Firefox:
![Разрешение отклонено для <code> < http://player.vimeo.com> <;/code > для получения свойства pet Location.toString]()
И в Chrome:
![Небезопасная попытка javascript доступа к кадру с URL-адресом... из фрейма с URL-адресом `http://player.vimeo.com/video/3718294?api=1 Домены, протоколы и порты должны соответствовать.]()
Импортирование файла froogaloop из CDN:
<script src="http://a.vimeocdn.com/js/froogaloop2.min.js"></script>
Мой JS:
$(function(){
var vimeoPlayer = document.querySelector('iframe');
$f(vimeoPlayer).addEvent('ready', ready);
function ready(player_id) {
froogaloop = $f(player_id);
function setupEventListeners() {
function onPlay() {
froogaloop.addEvent('play',
function(data) {
console.log('play event');
});
}
function onPause() {
froogaloop.addEvent('pause',
function(data) {
console.log('pause event');
});
}
function onFinish() {
froogaloop.addEvent('finish',
function(data) {
console.log('finish');
});
}
onPlay();
onPause();
onFinish();
}
setupEventListeners();
}
})
Мой HTML:
<iframe src="http://player.vimeo.com/video/3718294?api=1" width="623" height="350" frameborder="0" id="iframe-video"></iframe>
Ответы
Ответ 1
После нескольких часов и часов разочарования... Я нашел решение.
Поскольку я использовал идентификатор iframe... очевидно, API vimeo заставляет вас добавить параметр к URL-адресу, который вы извлекаете (player_id = iframe-id).
Итак, iFrame должен выглядеть так:
<iframe src="//player.vimeo.com/video/3718294?api=1&player_id=promo-vid"
width="623" height="350" frameborder="0"
id="promo-vid">
</iframe>
Особая благодарность Дрю Бейкеру за это: http://vimeo.com/forums/topic:38114#comment_5043696
Ответ 2
Появилась ошибка при создании элемента игрока при выборе iframe с jQuery.
var iframe = $('#player1');
var player = $f(iframe);
Результаты в
TypeError: d[f] is undefined
Решение для меня состояло в том, чтобы выбрать первый элемент в селекторе jQuery ID
var iframe = $('#player1')[0];
var player = $f(iframe);
Ответ 3
Я думаю, что вы нарушаете Одинаковая политика происхождения. Вы заметите здесь, в котором вы выполняете большую обработку событий, они используют специальные вызовы API froogaloop.
Я никогда не использовал froogaloop, поэтому я, вероятно, ошибаюсь. Но это моя догадка. Ошибки, по-видимому, указывают на то, что iframe пытается изменить URL-адрес вашего браузера, и это теперь разрешено Same Origin. Вот почему API обертывает window.postMessage для вас.
Ответ 4
Имея аналогичную проблему, с Froggaloop2 - кажется, что если видео кешируется, готовое событие будет срабатывать только один раз (при начальной загрузке). Решение состоит в том, чтобы извлечь iframe с изменением src, как:
$(iframe).attr('src', $(iframe).attr('src') + '#timestamp='+(new Date()).getTime());
Ответ 5
Ответ, получивший наибольшее количество голосов, спас меня, огромное спасибо! Любой, кто нуждается в помощи, первый ответ работает, и трудно найти ответ на этот вопрос.