2010-05-21 106 views
5

我有兩個colorbox彈出框,分別顯示一個youtube視頻。當他們完成播放時,我試圖讓他們自動關閉colorbox窗口。下面的代碼在firefox中完美工作,但在IE中無法使addEventListener正常工作。我試過attachEvent沒有成功。任何人都可以就如何解決這個問題提供任何建議嗎?這看起來很簡單,但我竭盡全力尋找解決方案。順便說一下,這是我第一次在stackoverflow,它是非常令人印象深刻。javascript addEventListener onStateChange在IE中不工作

更新1:

好了,這是我當前的代碼。它在FF中完美運行,但IE只輸出很好。 IE8調試器不會報告任何錯誤,要麼...

function onYouTubePlayerReady(playerId) { 
    if (playerId && playerId != 'undefined') { 
    if(playerId && playerId == 'ytvideo1'){ 
     var ytswf = document.getElementById('ytplayer1'); 
     alert('good'); 
    } else if(playerId && playerId == 'ytvideo2'){ 
     var ytswf = document.getElementById('ytplayer2'); 
    } else { 
    } 

    setInterval('', 1000); 
    ytswf.addEventListener('onStateChange', 'onytplayerStateChange'); 
    alert('great'); 
    } 
} 


function onytplayerStateChange(newState) { 
    alert('amazing'); 
    if(newState == 0){ 
    $.fn.colorbox.close(); 
    alert('perfect'); 
    } 
} 

更新3:解決方案

簡單地講的onComplete在我的顏色框,並把在該SWFObject的,它在IE完美。

+0

addEvent應該可以工作。你可以展示你如何使用addEvent的代碼。 – Rajat 2010-05-21 21:10:34

+0

我的意思是attachEvent。 – Rajat 2010-05-21 21:17:26

+0

我只是做了ytplayer.attachEvent(「onStateChange」,onytplayerStateChange);就在addEventListener的下面,我沒有放入一個條件,認爲它沒有關係。 – Derek 2010-05-21 21:20:15

回答

2

在IE瀏覽器的測試,它看起來像你正在使用

ytswf = document.getElementById('ytplayer1'); 

分配的實際加載的SWF對象之前的基準,所以IE認爲你指的是一個簡單的div元素

你需要運行此代碼

function onYouTubePlayerReady(playerId) { 
    ytswf = document.getElementById("ytplayer1"); 
    ytplayer.addEventListener("onStateChange", "onytplayerStateChange"); 
} 

你打電話後立即

swfobject.embedSWF("http://www.youtube.com/v/SPWU-EiulRY? 
hl=en_US&hd=0&rel=0&fs=1&autoplay=1&enablejsapi=1&playerapiid=ytvideo1", 
"popupVideoContainer1", "853", "505", "8", null, null, params, atts); 

你收的是$(function()

,並把var ytswf;<script> ,而不是進一步下跌

+0

嗯,我花了4個小時,因爲它讓我好奇,不幸的是我空手而歸。但它不是attachEvent。這是......彩盒。它所做的事情是,IE不能在渲染之後完全引用youTube對象。看看這裏的源代碼:這裏的狀態是用colorbox的缺失捕獲的:http://plain7.com/test.htm,這裏,不去:http://plain7.com/test2.htm 。 ..這只是在IE瀏覽器,其他瀏覽器正確。 我放棄了:)這是近5點,我是braindead。可以嘗試一些其他的燈箱實現(雖然colorbox也是我的最愛) – Raine 2010-05-30 11:50:01

+0

呵呵,現在你看我過去的兩週感覺如何...感謝您的關注,我確信我可以找到替代方案colorbox,這只是一些嚴重的修改。我打算將您的答案標記爲正確,因爲現在我知道attachEvent不是問題。再次感謝! – Derek 2010-05-30 17:37:35

+0

謝謝你的觀點,德里克,儘管我覺得我沒有那麼多的幫助。我有一個想法,但如果你加載swfObject之後你渲染的顏色框窗口,就像在回調到colorbox。我不知道它可能會產生什麼其他問題,但在切換燈箱之前,可能是值得嘗試的東西。 – Raine 2010-05-31 06:23:27

-1

YouTube播放器對象實現了自己的addEventListener方法這更像是AS3的語法如何回答新。按照該信息中列出here

player.addEventListener(事件:字符串, 聽衆:字符串):空

YouTube向我聯繫,我會在這裏提供的頁面上的例子:

function onYouTubePlayerReady(playerId) { 
    ytplayer = document.getElementById("myytplayer"); 
    ytplayer.addEventListener("onStateChange", "onytplayerStateChange"); 
} 

function onytplayerStateChange(newState) { 
    alert("Player's new state: " + newState); 
} 

YouTube還提供了一個示例頁面,似乎證明他們的示例代碼在IE中可用。我將鏈接該示例頁面here

現在,這裏是在試圖重新編寫代碼的相關部分按照由谷歌/ YouTube上提供的示例工作:

function onYouTubePlayerReady(playerId) { 
    if(playerId && playerId == 'ytvideo1'){ 
    var ytplayer = document.getElementById('ytplayer1'); 
    } else if(playerId && playerId == 'ytvideo2'){ 
    var ytplayer = document.getElementById("ytplayer2"); 
    } else { 
    return; 
    } 

    ytplayer.addEventListener('onStateChange', 'onytplayerStateChange'); 
} 

所以,事實證明,在這裏被所犯的錯誤出現從使用方法名稱'addEventListener'創建的混淆。在W3C JavaScript實現中,第二個參數是在YouTube實現中的一個函數,第二個參數是一個字符串。給這個鏡頭=)。

+0

我改變了我原來的問題中的onYouTubePlayerReady來反映你的答案。在FF中,警報1,在IE中警告2. FF按預期工作,IE不運行onytplayerStateChange功能。我正確使用attachEventHandler嗎?會使用bind()函數來幫助我的情況? – Derek 2010-05-22 00:17:55

+0

再一次,在FF中工作,而不是IE。也許一個例子可以幫助你們解決我的問題。 – Derek 2010-05-22 17:51:12

+0

Derek,請打開我在我的答案中鏈接的示例頁面,並告訴我您是否看到onCateChange事件顯示在您的IE版本中。我已經在IE8中測試過了,它對我來說似乎工作得很好。另請注意,addEventListener中不需要第三個參數。嘗試使用我提供的onYouTubePlayerReady替換您的onYouTubePlayerReady,然後回報。你根本不需要分支語句。 – 2010-05-22 19:01:25

4

IE不支持addEventListener做後立即之前?你需要attachEvent對不對?

if (el.addEventListener){ 
    el.addEventListener('click', modifyText, false);  
else if (el.attachEvent){ 
    el.attachEvent('onclick', modifyText); 
}