2010-05-21 55 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); 
}