Firefox插件:XUL Overlay中隐藏的<browser>?</browser>

时间:2011-09-12 17:31:04

标签: javascript firefox dom firefox-addon

我正在尝试在我的Firefox插件中加载和操作我的叠加层中的隐藏<browser />标记(我的插件功能的一部分)。但是,我无法访问我在document的叠加层中添加的任何元素。

例如,这不起作用:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://foxy_bucks/skin/overlay.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://foxy_bucks/locale/overlay.dtd">
<overlay id="foxy_bucks-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <browser id="bContainer" src="http://google.com/"></browser>
    <script type="text/javascript">
        window.addEventListener("load", function(){
            alert(document.bContainer.src);
        }, false);
    </script>
</overlay>

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:4)

叠加始终必须扩展现有元素。如果在覆盖的顶层有一个标记,该标记在文档中尚不存在,则忽略该元素(<script>标记是规则中值得注意的例外)。在您的情况下会发生这种情况,您所覆盖的文档中不存在ID bContainer,因此您的<browser>标记会被忽略。此机制允许在同一个叠加层中包含Firefox和SeaMonkey工具菜单的内容 - 此菜单在Firefox和SeaMonkey中具有不同的ID,因此在Firefox中忽略覆盖SeaMonkey菜单的部分,反之亦然。

如果要向文档添加元素,则需要覆盖其根元素。对于Firefox浏览器窗口,它看起来像这样(注意main-window是根元素的ID):

<overlay id="foxy_bucks-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <window id="main-window">
    <browser id="bContainer" src="http://google.com/"></browser>
  </window>
  ...
</overlay>

附注:要按ID访问元素,您需要使用document.getElementById()

alert(document.getElementById("bContainer").src);