2012-05-28 3 views
4

게임에로드 진행률 막대가 표시되고 오디오에서 onloadeddata 속성에 할당 된 기능이 있지만 Chrome에서 트리거되지 않습니다. 그것은 다른 브라우저에서 작동합니다. 또한 oncanplay, oncanplaythrough, onloadedmetadata 등과 같은 많은 다른 이벤트를 시도했습니다. 그 중 아무 것도 트리거되지 않았습니다.HTML5 Chrome에서 오디오 이벤트가 실행되지 않음

캐싱과 관련이 있다고 생각합니다. 주변을 둘러 보려고 시도했는데 2 ~ 3 년 전만해도 몇 가지보고가 있었지만 최근에는 없었습니다.

오디오가로드되거나 이러한 이벤트가 작동하는 경우 다른 방법으로 검색 할 수 있습니까?

수정 : 다음은 간단한 예입니다. http://jsfiddle.net/3vxCu/1/ 오페라와 파이어 폭스에서 작동하지만 크롬에서는 작동하지 않습니다. 적재가 끝나면 소리가 나면 경고합니다.

+0

당신이 오디오 파일을로드하고 이벤트 리스너를 부착하는 자바 스크립트 코드를 공유 주시겠습니까? – pseudosavant

+0

@pseudosavant JSFiddle에 예제를 추가했습니다. –

답변

8

onloadeddata 속성이 어떤 이유로 작동하지 않는 것 같습니다. 그러나 addEventListener (또는 jQuery를 통해)를 통해 이벤트 처리기를 부착하여 작동합니다 http://jsfiddle.net/3vxCu/4/

bgSound = new Audio(); 
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg"; 
bgSound.preload = "auto"; 
// Standard browsers (not IE before version 9): 
// bgSound.addEventListener("loadeddata", testFunction, false); 

// jQuery: 
$(bgSound).on("loadeddata", testFunction); 

function testFunction() { 
    alert("Data loaded"); 
} 
+0

이상한. 나는 전문가는 아니지만 나에게 크롬 버그처럼 보입니다. 누군가 티켓 등을 제출해야합니다. 감사합니다. 감사합니다. –

+1

@EhsanKia이 문제를 가장 철저하게 테스트했는데 버그 보고서를 작성하지 않으시겠습니까? :) http://code.google.com/p/chromium/issues/list – panzi

3

첨부 된 jsfiddle이 코드를 구현 한 방법이라면 무엇이 잘못되었는지 알 것입니다.

귀하의 jsfiddle 쇼 :

bgSound = document.createElement('audio'); 
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg"; 
bgSound.onloadeddata = testFunction; 

function testFunction(){ 
    alert("Data loaded"); 
} 

그것은 다음과 같이해야한다 :

bgSound = document.createElement('audio'); 
bgSound.onloadeddata = testFunction; // Event listener is attached _before_ loading the resource 
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg"; 

function testFunction(){ 
    alert("Data loaded"); 
} 

는 기본적으로, 당신은src 후 이벤트 리스너 를 연결하는 지정됩니다. 소스를 지정하면 모든 동작을 설정 한 이후에 마지막으로 수행해야합니다. Chrome은 이미 코드에 첨부 될 때까지 해당 이벤트의 리스너를 호출하는 지점을 이미 지나간 것입니다.

+0

나는 그것이 사실이라고 생각하지 않는다. 데이터가 비동기 적으로로드되고 데이터가 이미 캐시 된 경우에도 이벤트 핸들러는 비동기 적으로 호출됩니다 (즉, 현재 실행중인 자바 스크립트가 완료된 후). 그러나 IE는 때때로 그러한 것들을 동 기적으로 처리한다고 생각합니다. (적어도 한 번만 onhashchange 핸들러를 동 기적으로 호출했습니다. 다른 모든 브라우저는 비동기로 호출합니다.) – panzi

+0

'src' 속성을 설정하기 전에 항상 이벤트 리스너를 설정해야한다는 것을 100 % 확실하게 말할 수 있습니다. 비동기라고 가정하는 것은 일이 항상 순차적으로 실행되지 않는다는 것을 의미하지만 항상 그런 것은 아닙니다. 이벤트가 들리기 전에 이벤트 리스너가 100 % 확신 할 수있는 유일한 방법은 'src'를 설정하기 전에 이벤트 리스너를 첨부하는 것입니다. Chrome은 많은 단축키/최적화를 필요로하며, 아무것도 듣지 않으면 'src'가 설정된 경우 이벤트를 호출하려고하지 않을 수도 있습니다. – pseudosavant

관련 문제