2012-06-28 99 views
2

我需要爲所有打開的Firefox窗口隱藏一個iframe。如何從JavaScript XPCOM組件創建隱藏的iframe /瀏覽器?

現在我在XUL疊加層中創建iframe,因此它爲每個瀏覽器窗口創建。

我想我應該使用XPCOM組件來爲所有瀏覽器窗口提供單個iframe實例,但是我找不到如何從中創建XUL元素的方法。

可能嗎?

回答

3

可以創建hidden window內框:

var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"] 
          .getService(Components.interfaces.nsIAppShellService) 
          .hiddenDOMWindow; 
var frame = hiddenWindow.document.getElementById("myExtensionFrame"); 
if (!frame) 
{ 
    var XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; 
    frame = hiddenWindow.document.createElementNS(XUL_NS, "iframe"); 
    frame.setAttribute("id", "myExtensionFrame"); 
    frame.setAttribute("src", "..."); 
    hiddenWindow.document.documentElement.appendChild(frame); 
} 

但是,如果你需要的是運行全局代碼的地方,然後有更好的方式 - 像JavaScript code modules

+0

好的解決方法,謝謝,但似乎任何人(從其他擴展)可以改變隱藏窗口的location.href和我的代碼將被中斷。 – KAdot

+1

@KAdot:理論上 - 是的。實際上 - 這樣做會很破壞性,沒有延伸。 –

+0

每個Firefox插件都需要更多的控制,比如它可以修改核心瀏覽器的功能,以及破壞其他(競爭者?)插件......但是,僅僅因爲這是可能的,並不意味着人們會做這些奇怪的事情事情......所以,你可以安全地假設沒有插件更改隱藏的窗口href ... –