Перемещение обработчиков событий в функцию javascript
Что мне в основном нужно сделать, это прикрепить строки этого кода к этому файлу. 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
JavaScript Error: "TypeError: aElement is undefined" {file: "chrome://browser/content/aboutDownloads.js" line: 435}
Многократно. Как я могу это исправить?. Это часть кода от Firefox для проекта Android.
1 ответ
Оберните вызовы вашего метода в анонимную функцию следующим образом:
document.getElementById("contextmenu-open").addEventListener("click", ContextMenus.open, false);
к этому:
document.getElementById("contextmenu-open").addEventListener("click", function() {ContextMenus.open()}, false);
Это сохраняет ContextMenus
объект в качестве вызывающего метода и убедитесь, что this
устанавливается правильно при вызове метода.
Кроме того, я не думаю, что вы хотите установить DOMContentLoaded
обработчик события в handle_events ()because
DOMContentLoadedhas already fired at that point since you're calling
handle_events ()from a
DOMContentLoaded` обработчик событий.
За Downloads.init()
позвоните прямо в первую строку handle_events()
, DOM уже загружен, так что вы можете просто позвонить, вам не нужно ждать события.