javascript addEventListener onStateChange在IE中不起作用
我有两个彩盒弹出框,每个弹出框都显示一个youtubevideo。 当他们完成播放时,我试图让它们自动关闭彩盒窗口。 下面的代码在firefox中运行完美,但在IE中我无法使用addEventListener。 我试过attachEvent没有成功。 任何人都可以就如何解决这个问题提出任何建议吗? 看起来很简单,但我已经筋疲力尽,试图找到解决方案。 顺便说一句,这是我第一次在stackoverflow,这是非常令人印象深刻。
更新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:解决方案
简单地在我的颜色框中放入完成并将swfobject放入其中,它在IE中完美运行。
从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;
在而不是向下
IE不支持addEventListener
吗? 你需要attachEvent
吗?
if (el.addEventListener){ el.addEventListener('click', modifyText, false); else if (el.attachEvent){ el.attachEvent('onclick', modifyText); }
新答案
YouTube播放器对象实现了自己的addEventListener方法,这更像是AS3的语法。 根据此处列出的信息:
player.addEventListener(event:String,listener:String):Void
YouTube在我链接的页面上提供了一个示例,我将在此处提供:
function onYouTubePlayerReady(playerId) { ytplayer = document.getElementById("myytplayer"); ytplayer.addEventListener("onStateChange", "onytplayerStateChange"); } function onytplayerStateChange(newState) { alert("Player's new state: " + newState); }
YouTube还提供了一个示例页面,似乎可以certificate他们的示例代码在IE中有效。 我将链接该示例页面。
现在,根据Google / 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'); }
因此,事实certificate,此处所犯的错误源于使用方法名称“addEventListener”所造成的混淆。 在W3C JavaScript实现中,第二个参数是一个函数,而在YouTube实现中,第二个参数是一个字符串。 给这个镜头=)。