2011-06-30 17 views
23

Estoy tratando de reconocer el evento onPlay, onPause y onFinish para vimeo usando la API froogaloop. He intentado todo lo que pude imaginar con esta cosa y no tuve suerte.Vimeo Froogaloop API no reconoce un evento

me sale este error en Firefox:

Permission denied for <code><http://player.vimeo.com></code> to get pet property Location.toString

Y en Chrome:

Unsafe javascript attempt to access frame with URL ... from frame with URL `http://player.vimeo.com/video/3718294?api=1. Domains, protocols and ports must match.

Importación froogaloop de la CDN:

<script src="http://a.vimeocdn.com/js/froogaloop2.min.js"></script> 

Mis 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(); 
    } 

}) 

Mi HTML:

<iframe src="http://player.vimeo.com/video/3718294?api=1" width="623" height="350" frameborder="0" id="iframe-video"></iframe> 

Respuesta

77

Después de horas y horas de frustración ... He encontrado la solución.

Como estaba usando una ID en el iframe ... al parecer, la API de vimeo obliga a agregar el parámetro a la URL que está buscando (player_id = iframe-id).

lo tanto, el marco flotante debe tener este aspecto:

gracias
<iframe src="//player.vimeo.com/video/3718294?api=1&player_id=promo-vid" 
     width="623" height="350" frameborder="0" 
     id="promo-vid"> 
</iframe> 

especiales con Drew Baker por señalar esto: http://vimeo.com/forums/topic:38114#comment_5043696

+3

¡De nada! Me alegro de poder ayudar. –

+5

Hice un ejemplo de cómo usar la API de Vimeo aquí: http://labs.funkhausdesign.com/examples/vimeo/froogaloop2-api-basics.html –

+0

Todavía estoy trabajando en la parte de 'horas de frustración'. Cuando sigo los ejemplos dado, todo lo que obtengo son violaciones de la política de seguridad de JavaScript. ¿Cómo superaste esto? – RSG

1

Creo que está violando la Same Origin Policy. Notarás here que cuando estás haciendo un montón de manejo de eventos, están usando llamadas especiales de froogaloop API.

Nunca he usado froogaloop, así que probablemente estoy equivocado. Pero esa es mi suposición. Los errores parecen sugerir que el iframe está intentando modificar la URL en su navegador, y eso ahora lo permite Same Origin. Es por eso que la API cierra window.postMessage por ti.

+0

¿Qué puedo hacer para solucionar este problema entonces? – criticerz

+0

Adhiera más a su patrón. Por ejemplo, mira su ejemplo SimpleButtons; sus devoluciones de llamada evenListener son todas llamadas a métodos de API froogaloop. Como está agregando un detector de eventos al objeto froogaloop que intenta interactuar con su navegador, debe hacerlo a través de su API.Además, mirando su API, no veo un "addEvent" definido para un objeto froogaloop, solo un addEventListener. Definen su propio evento addEvent en su código de ejemplo que envuelve addEventListener. Me hace pensar que hay un problema con el uso de addEvent incorporado relacionado con Same Origin. –

+0

Tuve un problema similar. Mi video está oculto por defecto. Traté de mostrar el video primero (a través de jQuery '' 'somediv.show();' ''), y directamente después de esto, traté de llamar a: '' 'player.api ('play');' '' . Esto resulta en un comportamiento realmente extraño, donde el video no se reproduce, o se reproduce después de 30 segundos más o menos ... Al final, acabo de crear una función separada (digamos OnPlay), que solo contiene: '' 'player.api ('play');' ''. Ahora la línea se convierte en: '' 'somediv.show (0, OnPlay)' ''; Esto funciona! ¿Pero por qué? – danger89

0

Habiendo tenido un problema similar, con Froggaloop2 - parece ser que si el vídeo es en caché, el evento listo se disparará solo una vez (en la carga inicial). La solución consiste en recuperar el iframe src con el cambio, como:

$(iframe).attr('src', $(iframe).attr('src') + '#timestamp='+(new Date()).getTime()); 
2

Tienes un error al crear el elemento reproductor hora de seleccionar el iframe con jQuery.

var iframe = $('#player1'); 
var player = $f(iframe); 

Resultados en

TypeError: d[f] is undefined 

solución para mí fue seleccionar el primer elemento en el selector de jQuery ID

var iframe = $('#player1')[0]; 
var player = $f(iframe); 
+0

¿Recibió la respuesta @Max? – malhar

+0

Seleccione el objeto 1. JS que está dentro del selector jQuery con un [0] detrás, como statet en la parte inferior de mi respuesta ... –

+0

Lo usé, sin embargo, estoy obteniendo el mismo error! iframe no está definido si trato de alertar lo mismo. Además, al usar Player_id, y api = 1, – malhar

Cuestiones relacionadas