2
我需要爲所有打開的Firefox窗口隱藏一個iframe。如何從JavaScript XPCOM組件創建隱藏的iframe /瀏覽器?
現在我在XUL疊加層中創建iframe,因此它爲每個瀏覽器窗口創建。
我想我應該使用XPCOM組件來爲所有瀏覽器窗口提供單個iframe實例,但是我找不到如何從中創建XUL元素的方法。
可能嗎?
我需要爲所有打開的Firefox窗口隱藏一個iframe。如何從JavaScript XPCOM組件創建隱藏的iframe /瀏覽器?
現在我在XUL疊加層中創建iframe,因此它爲每個瀏覽器窗口創建。
我想我應該使用XPCOM組件來爲所有瀏覽器窗口提供單個iframe實例,但是我找不到如何從中創建XUL元素的方法。
可能嗎?
可以創建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。
好的解決方法,謝謝,但似乎任何人(從其他擴展)可以改變隱藏窗口的location.href和我的代碼將被中斷。 – KAdot
@KAdot:理論上 - 是的。實際上 - 這樣做會很破壞性,沒有延伸。 –
每個Firefox插件都需要更多的控制,比如它可以修改核心瀏覽器的功能,以及破壞其他(競爭者?)插件......但是,僅僅因爲這是可能的,並不意味着人們會做這些奇怪的事情事情......所以,你可以安全地假設沒有插件更改隱藏的窗口href ... –