javascript addEventListener onStateChange在IE中不工作
我有两个colorbox弹出框,分别显示一个youtube视频。当他们完成播放时,我试图让他们自动关闭colorbox窗口。下面的代码在firefox中完美工作,但在IE中无法使addEventListener正常工作。我试过attachEvent没有成功。任何人都可以就如何解决这个问题提供任何建议吗?这看起来很简单,但我竭尽全力寻找解决方案。顺便说一下,这是我第一次在*,它是非常令人印象深刻。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完美。
在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>
,而不是进一步下跌
嗯,我花了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
呵呵,现在你看我过去的两周感觉如何...感谢您的关注,我确信我可以找到替代方案colorbox,这只是一些严重的修改。我打算将您的答案标记为正确,因为现在我知道attachEvent不是问题。再次感谢! – Derek 2010-05-30 17:37:35
谢谢你的观点,德里克,尽管我觉得我没有那么多的帮助。我有一个想法,但如果你加载swfObject之后你渲染的颜色框窗口,就像在回调到colorbox。我不知道它可能会产生什么其他问题,但在切换灯箱之前,可能是值得尝试的东西。 – Raine 2010-05-31 06:23:27
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实现中的一个函数,第二个参数是一个字符串。给这个镜头=)。
我改变了我原来的问题中的onYouTubePlayerReady来反映你的答案。在FF中,警报1,在IE中警告2. FF按预期工作,IE不运行onytplayerStateChange功能。我正确使用attachEventHandler吗?会使用bind()函数来帮助我的情况? – Derek 2010-05-22 00:17:55
再一次,在FF中工作,而不是IE。也许一个例子可以帮助你们解决我的问题。 – Derek 2010-05-22 17:51:12
Derek,请打开我在我的答案中链接的示例页面,并告诉我您是否看到onCateChange事件显示在您的IE版本中。我已经在IE8中测试过了,它对我来说似乎工作得很好。另请注意,addEventListener中不需要第三个参数。尝试使用我提供的onYouTubePlayerReady替换您的onYouTubePlayerReady,然后回报。你根本不需要分支语句。 – 2010-05-22 19:01:25
IE不支持addEventListener
做后立即之前?你需要attachEvent
对不对?
if (el.addEventListener){
el.addEventListener('click', modifyText, false);
else if (el.attachEvent){
el.attachEvent('onclick', modifyText);
}
addEvent应该可以工作。你可以展示你如何使用addEvent的代码。 – Rajat 2010-05-21 21:10:34
我的意思是attachEvent。 – Rajat 2010-05-21 21:17:26
我只是做了ytplayer.attachEvent(“onStateChange”,onytplayerStateChange);就在addEventListener的下面,我没有放入一个条件,认为它没有关系。 – Derek 2010-05-21 21:20:15