2014-02-10 40 views
2

我基本上需要做的就是将此代码行添加到此文件中。 http://mxr.mozilla.org/mozilla-central/source/mobile/android/chrome/content/aboutDownloads.js将事件处理程序移入javascript函数

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} 

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

回答

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事件处理程序()because DOMContentLoaded has already fired at that point since you're calling handle_events()from a DOMContentLoaded`事件处理程序。

对于Downloads.init(),只需直接调用它的handle_events()第一线。 DOM已经加载,所以你可以调用它,你不必等待事件。

+0

完成的改变和正在建造,所以我怎么能火Downloads.init()函数呢?没有事件,我无法附加事件处理程序! – Madushan

+1

直接在handle_events()的第一行调用'Downloads.init()'。您不必等待事件,因为DOM已经加载。 – jfriend00

+0

它工作。以前Downloads.init()函数也没有触发我认为是因为'DOMContentLoaded'已经完成了。我将其标记为答案:) – Madushan