2011-09-12 46 views
0

我試圖在我的Firefox插件中加載和操作隱藏的<browser />標記(我的插件功能的一部分)。但是,我無法訪問從document覆蓋的任何元素。Firefox插件:在XUL Overlay中隱藏<browser />?

例如,這是行不通的:

<?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

我不確定你可以這樣做。我試着用你的腳本(稍加修改),我得到了一個未定義的警報。請檢查以下內容:https://developer.mozilla.org/en/Code_snippets/On_page_load – linguini

+0

謝謝,但重點在於我可以在後臺操作隱藏的*瀏覽器控件,而不會干擾用戶的操作正在做。 – mattsven

+0

該文件要求選項卡/窗口已打開... – mattsven

回答

4

重疊總是必須擴展現有的元素。如果在疊加層的頂層有一個標籤,並且文檔中尚不存在該標識,則簡單地忽略該元素(<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); 
+0

太棒了!謝謝。 – mattsven