Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Failed to execute 'postMessage'" error from Froogaloop via AngularJS directive

I wrote an AngularJS directive for vimeo videos with built in play/pause functionality using their froogaloop library.

It's works great! The only issue is that I get the following error when the page first loads.

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('http://player.vimeo.com') does not match the recipient window's origin

Am I initializing the froogaloop object wrong in the directive? Any suggestions would be most appreciated.

You can check it out the plunker here: http://plnkr.co/edit/GKWNk3LhX0MR3lhpfqyA

like image 488
npatten Avatar asked Jan 20 '14 09:01

npatten


2 Answers

I recommend to execute the code in the onLoad event from <iframe>. Then you are ensured that the code will execute when iframe is ready for receiving messages.

There are plenty ways to do it:

  • You can use jQuery if you already have it in your project: $('iframe').load(callback) or
  • write an EventListener: iframe_element.addEventListener('load', callback) or
  • use plain onload callback: iframe_element.onload = callback.

Where callback is the method which uses Froogaloop.

But you have to know that some of those solutions might have some drawbacks on some old/MS browsers browsers.

like image 180
Ravbaker Avatar answered Sep 22 '22 13:09

Ravbaker


For me it looks like angularjs triggers Player API before actually rendering the iframe on the page. At least if I postpone scope.$watch it works fine:

$timeout(function() {
    scope.$watch('controlBoolean', function() {/* your code goes here */});
});
like image 41
Yauheni Leichanok Avatar answered Sep 21 '22 13:09

Yauheni Leichanok