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 错误说

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

多次。我怎样才能解决这个问题?。这是来自 Firefox for android 项目的代码的一部分。

4

1 回答 1

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() becauseDOMContentLoaded has already fired at that point since you're callinghandle_events() from aDOMContentLoaded` 事件处理程序中安装事件处理程序。

对于Downloads.init(),直接在第一行调用即可handle_events()。DOM 已经加载,因此您可以直接调用它,而不必等待事件。

于 2014-02-10T06:32:28.177 回答