Firefox插件:隐藏<browser />在XUL覆盖

Firefox Addons: Hidden <browser /> in XUL Overlay?

本文关键字:XUL 覆盖 browser 隐藏 插件 Firefox      更新时间:2023-09-26

我试图在我的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>
谁能给我指个正确的方向?

叠加总是必须扩展现有的元素。如果你在覆盖层的顶层有一个标签,这个标签的ID还不存在于文档中,那么这个元素就会被忽略(<script>标签是该规则的一个值得注意的例外)。这种情况发生在您的情况下,ID bContainer在您要覆盖的文档中不存在,因此您的<browser>标记被简单地忽略。这种机制允许在相同的覆盖层中为Firefox和SeaMonkey工具菜单提供内容-该菜单在Firefox和SeaMonkey中具有不同的ID,因此覆盖在SeaMonkey菜单上的部分在Firefox中被忽略,反之亦然。

如果你想添加一个元素到文档中,那么你需要覆盖它的根元素。对于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);