我正在尝试在我的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>
有人能指出我正确的方向吗?
答案 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);