我基本上需要做的是将此代码行附加到此文件。 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 for android项目代码的一部分。
答案 0 :(得分: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
DOMContentLoaded because
handle_events()has already fired at that point since you're calling
DOMContentLoaded`事件中安装from a
事件处理程序处理程序。
对于Downloads.init()
,只需在handle_events()
的第一行直接调用即可。 DOM已经加载,所以你可以调用它,你不必等待事件。