javascript - 新手在 Firefox 扩展 (XUL) 的 Javascript 中停留在基本事件监听器上

标签 javascript xul addeventlistener

我一直在学习 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/

相关文章:

javascript - _(variable_name) 在 JavaScript 中意味着什么?

javascript - 单击时阻止 jquery 动画多次执行

firefox - 控制 firefox add-on sdk 侧边栏宽度

xul - 打开用户的主文件夹?

javascript - XUL JS 打印错误到控制台

javascript - 如何将 JavaScript [object String] 转换为 HTMLElement?

javascript - 如何在选项卡更改时对浏览器选项卡标题的位置进行动画处理

html - element.addEventListener不添加监听器

javascript - 传递带参数的函数时不触发单击事件

JavaScript 表单提交带有一个名为 submit 的字段