2014-02-10 5 views
2

기본적으로이 코드 행을이 파일에 첨부해야합니다. 내가 그렇게 할 때 http://mxr.mozilla.org/mozilla-central/source/mobile/android/chrome/content/aboutDownloads.js이벤트 핸들러를 자바 스크립트 함수로 이동

window.addEventListener("DOMContentLoaded", function() {handle_events();}, true); 
window.addEventListener("unload", function() {Downloads.uninit();}, false); 

function handle_events(){ 
    window.addEventListener("DOMContentLoaded", function() {Downloads.init();}, true); 
    document.getElementById("contextmenu-open").addEventListener("click", ContextMenus.open, false); 
    document.getElementById("contextmenu-retry").addEventListener("click", ContextMenus.retry, false); 
    document.getElementById("contextmenu-remove").addEventListener("click", ContextMenus.remove, false); 
    document.getElementById("contextmenu-pause").addEventListener("click", ContextMenus.pause, false); 
    document.getElementById("contextmenu-resume").addEventListener("click", ContextMenus.resume, false); 
    document.getElementById("contextmenu-cancel").addEventListener("click", ContextMenus.cancel, false); 
    document.getElementById("contextmenu-removeall").addEventListener("click", ContextMenus.removeAll, false); 
    } 

는, 나는

JavaScript Error: "TypeError: aElement is undefined" {file: "chrome://browser/content/aboutDownloads.js" line: 435} 

여러 번 말을 자바 스크립트 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 이것은 안드로이드 프로젝트를위한 파이어 폭스의 코드의 일부입니다.

답변

1

이 같은 익명 함수에 메서드 호출을 랩 : 이것에

document.getElementById("contextmenu-open").addEventListener("click", ContextMenus.open, false); 

:

document.getElementById("contextmenu-open").addEventListener("click", function() {ContextMenus.open()}, false); 

이 메소드의 호출로 ContextMenus 개체를 보존하고 this가 설정되어 있는지 확인합니다 메서드가 호출 될 때 올바르게 호출됩니다.


는 또한, 당신이 'handle_events에서 DOMContentLoaded 이벤트 핸들러() becausehas already fired at that point since you're calling handle_events를 DOMContentLoaded() from a DOMContentLoaded` 이벤트 처리기를 설치할 생각하지 않습니다.

Downloads.init()의 경우 첫 번째 줄 handle_events()에서 직접 호출하십시오. DOM은 이미로드되어 있으므로 호출 만하면 이벤트를 기다릴 필요가 없습니다.

+0

변경 사항을 적용하고 지금 건물을 만들었으므로 어떻게 Downloads.init() 함수를 실행할 수 있습니까? 이벤트없이 이벤트 처리기를 연결할 수 없습니다! – Madushan

+1

'handle_events()'의 첫 번째 줄에서'Downloads.init()'를 직접 호출하면됩니다. DOM이 이미로드되어 있기 때문에 이벤트를 기다릴 필요가 없습니다. – jfriend00

+0

효과가있었습니다. 이전에'DOMContentLoaded'가 이미 완료 되었기 때문에 Downloads.init() 함수가 트리거되지 않았습니다. 답변으로 표시하고 있습니다 :) – Madushan

관련 문제