我一直在学习 MDN 教程,但我还无法让 JS 事件监听器工作。我已完成本页的最后一点:https://developer.mozilla.org/en-US/docs/XUL/Tutorial/Adding_Event_Handlers
在 XUL 中我有一个菜单项: menuitem id="appmenu-libraryHistory"label="历史记录"/>
在 JS 中我有这个: var HistoryWatch = document.getElementById("appmenu-libraryHistory"); HistoryWatch.addEventListener('命令', showLibrary, "历史记录"); 函数 showLibrary(aLeftPane) { ... }
我认为当按下菜单项“History”时,这会将字符串“History”传递给函数 showLibrary。如果我直接从 XUL 传递参数,showLibrary 函数确实可以工作,但如果我这样做,它不会让我传递 URI,而这正是我最终想要做的。
最佳答案
我怀疑您所显示的 JavaScript 位于作为 <script>
的一部分包含的文件中。标签。它可能不起作用,因为到时 document.getElementById()
线路运行,页面尚未构建,并且还没有具有此 id 的元素。
您需要等待页面完全加载才能确保您的菜单存在。如果您正在处理单独的窗口,则可以从其onload
调用初始化函数。 xul 中的属性。如果您仅覆盖现有窗口中的菜单,则需要监听父窗口的加载事件并从那里调用初始化:
function init()
{
window.removeEventListener("load", init, false); // Remove the handler as we don't need it anymore.
var historyWatch = document.getElementById("appmenu-libraryHistory");
historyWatch.addEventListener('command', showLibrary, "History");
}
window.addEventListener("load", init, false);
请注意,在此示例中,init
(和 showLibrary
)正在污染全局命名空间,最好将它们封装在一个对象中。
另请注意,顺序很重要,因为当最后一行运行时,init
函数必须已经声明,否则它将不会附加任何内容( undefined
)。
关于javascript - 新手在 Firefox 扩展 (XUL) 的 Javascript 中停留在基本事件监听器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21268847/