Vimeo Froogaloop API无法识别事件

我正在尝试使用froogaloop API识别vimeo的onPlay,onPause和onFinish事件。 我已经尝试过用这个东西想象的一切,没有运气。

我在Firefox上遇到此错误:

<img src="http://sofzh.miximages.com/javascript/1plza.png" alt=" 的权限被拒绝获取宠物属性Location.toString”>

在Chrome中:

不安全的javascript尝试使用URL访问框架...来自URL为http://player.vimeo.com/video/3718294?api=1的框架。域,协议和端口必须匹配。

从CDN导入froogaloop:

 

我的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上使用了ID …显然vimeo API强制您将参数添加到您要获取的URL(player_id = iframe-id)。

所以iFrame看起来应该是这样的:

  

特别感谢Drew Baker指出这一点: http : //vimeo.com/forums/topic : 38114 #comment_5043696

在使用jQuery选择iframe时创建播放器元素时出错。

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

结果是

 TypeError: d[f] is undefined 

我的解决方案是选择jQuery ID选择器中的第一个元素

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

我认为你违反了同源政策 。 你会注意到,在你进行大量事件处理的地方,他们正在使用特殊的froogaloop API调用。

我从来没有使用过froogaloop所以我可能错了。 但那是我的猜测。 这些错误似乎表明iframe正在尝试修改浏览器中的URL,现在Same Source允许这样做。 这就是为什么API为你包装window.postMessage的原因。

有一个类似的问题,使用Froggaloop2 – 似乎如果video被缓存,就绪事件将仅触发一次(在初始加载时)。 解决方案是通过更改src来检索iframe,如下所示:

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