2010-09-10 56 views
3

我需要停下來嵌入新透過oEmbed API(萬能播放器),但Vimeo的視頻,當我嘗試添加一個事件我得到這個錯誤:停止Vimeo的視頻與jQuery

Uncaught TypeError: Object #<an HTMLIFrameElement> has no method 'addEvent' 

但我不爲什麼我得到這個錯誤,我添加的jQuery和frogaloop API,還我添加的ID將內部框架,但它仍然不能正常工作::(

完整的代碼是在這裏:

http://tv.bisaccia.info

回答

-2

你不能。

  • 有沒有DOM addEvent方法。
  • 您沒有對Vimeo的跨域訪問權限,因此您不允許在iframe的文檔或摘要視圖中使用JavaScript界面​​。

如果您想通過JavaScript與Vimeo進行交互,您必須讓他們實現postMessage API,該API還可以接受您的域。

+0

ah,好:(我認爲它的工作原因是我在這裏閱讀它:http://github.com/vimeo/froogaloop/blob/master/README(和這裏http://vimeo.com/api/docs/moogaloop#universal)但是,感謝回覆:) – patrick 2010-09-11 16:23:05

+1

爲什麼你會說'你不能',當你可以。這完全是誤導。 – 2013-02-12 16:26:14

2

Eli,請編輯您的帖子。正如喬所說,你有些誤解。雖然postMessage 是跨域通信所需要的,但它通過調用「Froogaloop.init();」添加的DOM方法實現的「

is_embed_iframe = _this.iframe_pattern.test(cur_frame.getAttribute('src')); 

if (is_embed_iframe) { 
     cur_frame.api = _that.api; 
     cur_frame.get = _that.get; 
     cur_frame.addEvent = _that.addEvent; 
    } 

注:您將需要抓住從Vimeo的網站froogaloop.js(或最小變體)。

請務必在調用init()之前設置iFrame「src」,否則froogaloop將不執行任何操作。

0

按照小李的建議,調用:

Froogaloop.init(); 

確實使控制API的工作。在我的情況:

<iframe id="player_1" src="http://player.vimeo.com/video/26859570?js_api=1&amp;js_swf_id=player_1&amp;title=0&amp;byline=0&amp;portrait=0" width="620" height="354" frameborder="0"></iframe> 
<script> 
    $(document).ready(function() { 
     Froogaloop.init(); 
     $("#player_1").moogaloop({ 
      load: function(element) { 
       $("#segment1").click(function() { element.moogaloop('seekTo', "7"); }); 
      } 
     }); 
    }); 
</script> 

怪異...... Moogaloop的作者演示頁確實工作,而在init()調用。無論如何,爲我工作。

謝謝你的時間!

0

這不是正確的答案,但可能適用於您的情況,就像它爲我做的那樣。當我關閉其包含的DOM元素時,我只是想阻止我的Vimeo播放。我正在摺疊它的容器,並將其隱藏起來,但音頻繼續播放,並且不必要地使用瀏覽器資源。

我現在所做的只是將iframe存儲在變量中,將其從DOM中刪除,然後立即將其替換。我沒有跨瀏覽器進行測試,只有最新版本的Chrome和Safari Mobile。

var container = $("#VimeoContainer"); 
var iframe = container.find("iframe"); 
iframe.remove(); 
container.append(iframe); 

再次,Froogaloop是真的要走的路,但我已經受夠了它的問題在過去那麼針對這種情況我一直在尋找簡單的東西。顯然你可以在沒有JQuery的情況下做到這一點,並得到相同的結果。