2011-06-30 17 views
23

Tôi đang cố gắng nhận ra sự kiện onPlay, onPause và onFinish cho vimeo bằng API froogaloop. Tôi đã thử tất cả mọi thứ tôi có thể tưởng tượng với điều này, và không có may mắn.Vimeo Froogaloop API không nhận ra sự kiện

tôi nhận được lỗi này trên Firefox:

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

Và trong 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.

Nhập froogaloop từ CDN:

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

JS của tôi:

$(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 của tôi:

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

Trả lời

77

Sau giờ làm việc và giờ thất vọng ... Tôi đã tìm ra giải pháp.

Vì tôi đang sử dụng ID trên iframe ... dường như API vimeo buộc bạn thêm thông số vào URL bạn đang tìm nạp (player_id = iframe-id).

Vì vậy iFrame sẽ trông như thế này:

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

Đặc biệt Drew Baker cho trỏ này ra: http://vimeo.com/forums/topic:38114#comment_5043696

+3

Bạn được chào đón! Mừng vì tôi có thể giúp. –

+5

Tôi đã làm một ví dụ về cách sử dụng API Vimeo ở đây: http://labs.funkhausdesign.com/examples/vimeo/froogaloop2-api-basics.html –

+0

Tôi vẫn đang slogging thông qua phần 'giờ thất vọng'. Khi tôi làm theo các ví dụ được đưa ra tất cả tôi nhận được là vi phạm chính sách bảo mật javascript. Làm thế nào bạn vượt qua những điều này? – RSG

1

Tôi nghĩ rằng bạn đang vi phạm các Same Origin Policy. Bạn sẽ nhận thấy here rằng nơi bạn đang thực hiện rất nhiều xử lý sự kiện, họ đang sử dụng các lệnh gọi froogaloop API đặc biệt.

Tôi chưa bao giờ sử dụng froogaloop vì vậy có lẽ tôi đã sai. Nhưng đó là phỏng đoán của tôi. Các lỗi dường như gợi ý rằng iframe đang cố gắng sửa đổi URL trong trình duyệt của bạn và giờ đây được cho phép bởi Same Origin. Đó là lý do tại sao API kết thúc tốt đẹp window.postMessage cho bạn.

+0

tôi có thể làm gì để khắc phục điều này sau đó? – criticerz

+0

Tuân thủ nhiều hơn về mô hình của họ. Ví dụ, hãy xem ví dụ SimpleButtons của chúng; callbacks evenListener của chúng là tất cả các cuộc gọi đến các phương thức API của froogaloop. Vì bạn đang thêm trình xử lý sự kiện vào đối tượng froogaloop đang cố tương tác với trình duyệt của mình, bạn phải thực hiện điều đó thông qua API của họ.Ngoài ra, nhìn vào API của họ, tôi không thấy một "addEvent" được định nghĩa cho một đối tượng froogaloop, chỉ là một addEventListener. Chúng xác định addEvent của riêng chúng trong mã ví dụ của chúng kết thúc tốt hơn addEventListener. Làm cho tôi nghĩ rằng có vấn đề với việc sử dụng addEvent tích hợp có liên quan đến Cùng Nguồn gốc. –

+0

Tôi có một số vấn đề tương tự. Video của tôi bị ẩn theo mặc định. Tôi đã cố gắng để hiển thị video đầu tiên (thông qua jQuery '' 'somediv.show();' ''), và ngay sau đó, tôi đã cố gắng gọi: '' 'player.api ('play');' '' . Điều này dẫn đến hành vi thực sự lạ, nơi video không phát hoặc phát sau 30 giây hoặc lâu hơn ... Cuối cùng, tôi vừa tạo một hàm riêng biệt (giả sử OnPlay), chỉ chứa: '' 'player.api ('play');' ''. Bây giờ dòng trở thành: '' 'somediv.show (0, OnPlay)' ''; Tính năng này hoạt động! Nhưng tại sao? – danger89

0

Sau khi đã có một vấn đề tương tự, với Froggaloop2 - có vẻ như nếu video đó được lưu vào bộ nhớ cache, sự kiện sẵn sàng sẽ chỉ kích hoạt một lần (trên tải ban đầu). Giải pháp là để lấy iframe với thay đổi src, như:

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

Got lỗi khi tạo các yếu tố đầu khi lựa chọn các iframe với jQuery.

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

Kết quả trong

TypeError: d[f] is undefined 

Giải pháp đối với tôi là để chọn phần tử đầu tiên trong bộ chọn jQuery ID

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

Bạn có nhận được câu trả lời @Max không? – malhar

+0

Chọn đối tượng 1. JS bên trong bộ chọn jQuery có dấu [0] phía sau nó, như là statet ở cuối câu trả lời của tôi ... –

+0

Tôi đã sử dụng nó, tuy nhiên, tôi cũng gặp lỗi tương tự! iframe là không xác định nếu tôi cố gắng cảnh báo giống nhau. Ngoài ra, bằng cách sử dụng Player_id, và api = 1, – malhar

Các vấn đề liên quan