5

각 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 : 솔루션

간단하게 내 colorbox에 onComplete를 넣고 점에서 데 SWFObject를 놓고는 IE에서 완벽했다.

+0

addEvent가 작동해야합니다. addEvent를 사용하는 방법의 코드를 표시 할 수 있습니까? – Rajat

+0

attachEvent를 의미합니다. – Rajat

+0

간단히 말해 ytplayer.attachEvent ("onStateChange", onytplayerStateChange); addEventListener 바로 아래에, 나는 조건에 넣지 않았고, 중요하지 않다고 생각했습니다. – Derek

답변

2

는 IE에서 테스트에서, 당신은

ytswf = document.getElementById('ytplayer1'); 

실제 SWF 개체가로드되기 전에 할당 사용하는 기준과 같습니다 당신이 전화 직후에이 코드를

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()

및 바로 <script> 대신 더 아래

+0

글쎄요, 저에게 호기심이 생겼기 때문에 4 시간을 보냈습니다. 불행히도 나는 빈손으로 나왔습니다.그러나 attachEvent가 아닙니다. 그것은 ... colorbox입니다. 뭔가 IE는 렌더링 후에 youTube 객체를 참조 할 수 없다. 여기에서 소스 코드를 살펴보십시오. 여기 상태는 colorbox가 없으면 캡처됩니다. http://plain7.com/test.htm 여기, 계속 진행 : http://plain7.com/test2.htm . .. 그리고 이것은 IE에서만 존재합니다. 다른 브라우저는 올바르게합니다. 나는 포기한다. 그것은 거의 5am이고 나는 braindead이다. 다른 라이트 박스 구현을 시도해 볼 수도 있습니다. (colorbox는 제 fave도 마찬가지입니다.) – Raine

+0

하, 이제는 지난 2 주간의 느낌을 보았습니다 ... 조사해 주셔서 감사합니다. 대안을 찾을 수있을 것입니다. colorbox, 그저 심각한 수정이 필요합니다. attachEvent가 문제가 아니라는 것을 알고 있기 때문에 답을 올바르게 표시 할 것입니다. 다시 한 번 감사드립니다! – Derek

+0

포인트를 가져 주셔서 감사합니다, 데릭. 그래도 생각해 봤는데, swfObject를로드하면 컬러 박스 콜백과 같이 colorbox 윈도우를 렌더링 한 후에 어떻게 될까요? 나는 그것이 만들 수있는 다른 문제를 모르지만 라이트 박스를 바꾸기 전에 시도해 볼만한 가치가 있을지도 모릅니다. – Raine

-1

YouTube 플레이어 개체보다 어떻게 AS3의 구문처럼 자신의 addEventListener 메소드를 구현

새로운 대답.

player.addEventListener (이벤트 : 문자열, 청취자 : 문자열) :

유튜브 내가 여기에 제공하는 것입니다있는 링크 된 페이지의 예를 제공 공허 정보에 따라 here를 나열 :

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

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

YouTube는 예제 코드가 IE에서 작동한다는 것을 증명하는 예제 페이지도 제공합니다. 이 예제 페이지 here을 연결하겠습니다.

이제

, 여기에 구글/유튜브에서 제공하는 예에 따라 작동하도록 코드의 관련 부분을 쓰기를 재에서 시도이다 : 그래서

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 구현에서 두 번째 매개 변수는 함수이며 두 번째 매개 변수는 문자열입니다. 이거 줘. =).IE는

는 당신이 필요로하는 간단한 div 요소를 참조하는 생각 때문에

+0

답변을 반영하기 위해 원래 질문에서 onYouTubePlayerReady를 변경했습니다. FF에서는 경고 1, IE 2에서는 경고합니다. FF는 예상대로 작동하며 IE는 onytplayerStateChange 함수를 실행하지 않습니다. attachEventHandler를 올바르게 사용하고 있습니까? bind() 함수를 사용하면 내 상황에 도움이됩니까? – Derek

+0

IE에서도 FF로 작동합니다. 아마도 예를 들어 사람들이 내 문제를 해결하는 데 도움이 될 것입니다. – Derek

+0

Derek, 내 대답에 링크 된 예제 페이지를 열고 onStateChange 이벤트가 IE 버전에 표시되는지 확인하십시오. 나는 IE8에서 테스트 해봤는데, 나에게 잘 작동하는 것처럼 보였다. 또한 addEventListener에는 세 번째 매개 변수가 필요하지 않습니다. onYouTubePlayerReady를 내가 제공 한 것으로 바꾸고 다시보고하십시오. 분기 구문을 전혀 필요로하지 않아야합니다. –

4

IE는 addEventListener가 그것을 않습니다 지원하지 않습니다 후 var ytswf; 을 배치 사실을 닫기 전에? attachEvent이 필요하십니까?

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