javascript - 如何通过javascript访问XUL覆盖中的元素?

标签 javascript firefox-addon xul

我已经将一个插件加载到我的 XUL 覆盖层中,通过

<vbox style="height:0;">
    <html:embed type="application/x-my-plugin" id="my-plugin" style="height:0;"/>
</vbox>

现在,当用户加载新选项卡时会触发一个事件,并且我有对调用者的引用。这是通过附加到 XUL 覆盖层的 JavaScript 完成的。

var caller = myEvent.originalTarget;

当我尝试执行以下操作时,我的变量“plugin”为空。可能是什么问题以及如何解决该问题?

var plugin = caller.getElementById("my-plugin");
plugin.calculateTime();

最佳答案

我假设您的真实代码使用document.getElementById而不是caller.getElementById。如果 document.getElementById 返回 null 则具有此 ID 的元素肯定不在文档中。这可能有两个原因:

  1. 您访问该文档的时间过早,并且该文档尚未完成加载。通常,您不应该在 load 事件之前访问 DOM,这可能会导致各种问题。但是,如果您的代码从 TabOpen 事件运行,那么这应该不是问题。
  2. 当您的叠加层合并到浏览器窗口中时,此特定元素将被跳过。如果覆盖层顶层的元素没有 ID 或者在文档中找不到它们的 ID,则这些元素将被忽略。为了让您的元素被考虑,您的叠加层应如下所示:
<overlay ...>
  <window id="main-window">
    <vbox collapsed="true">
      <html:embed .../>
    </vbox>
  </window>
</overlay>

main-windowbrowser.xul 根元素的 ID,以便您的元素将插入到顶层。请注意,我使用了 collapsed attribute ,如果您需要一个不占用任何空间但仍处于初始化状态的元素,那么这比设置 height 样式更好。

关于javascript - 如何通过javascript访问XUL覆盖中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11348539/

相关文章:

javascript - 警报框没有出现 - 此功能有什么不正确的地方?

javascript - 如何在 jqGrid 的请求中将 postData._search 设置为 true?

firefox - Firefox 扩展如何将本地 css 文件注入(inject)网页?

javascript - setTimeout 在 XUL 7 中不起作用

javascript - 使用 javascript 加载 XUL 资源

firefox-addon - XUL prefwindow 大小问题

javascript - 使用 Express 和 Grunt 进行 Mocha 测试

Javascript es6 将 2 个静态类组合成一个对象

javascript - 如何在 Mozilla Add-on SDK 扩展中将变量传递给请求 API?

Firefox 扩展/插件 - 检测工作区已锁定