var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
var enum = windowManager.getEnumerator(null);
while(enum.hasMoreElements()) {
var win = enum.getNext().QueryInterface(Components.interfaces.nsIDOMChromeWindow);
write("WINDOW TITLE = " + win.document.documentElement.getAttribute("title"));
}
あなたがgetXULWindowEnumeratorを使用している場合、あなたはおそらくnsIDOMWindowを使用することができComponents.interfaces.nsIXULWindow
を使用する必要がありますが、窓にあなたの自己を開いた場合は、ウィンドウの名前を設定するための属性名オープン関数で。あなたはそれが新しいウィンドウを毎回表示されたウィンドウ名を空白のままにしている場合は、もう少し柔軟
var win = window.open("chrome://myextension/content/about.xul",
"windowName", "chrome,centerscreen");
write("WINDOW NAME: " + win.name); // Should now give WINDOW NAME: windowName
を持っているので、これはユーザーには表示されません。ただし、ウィンドウ名( ""以外)を使用すると、ウィンドウ名が存在しない場合は作成されます。または、指定した名前で既存のウィンドウに新しいコンテンツを読み込みます。
あなたの望むものとほとんど同じです。バットあなたがする必要がある場合は、リロードを避けるために名前属性を使用することができます。
var openNewWindow = true;
var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
var enum = windowManager.getEnumerator(null);
while(enum.hasMoreElements()) {
var win = enum.getNext().QueryInterface(Components.interfaces.nsIDOMChromeWindow);
if(win.name == "windowName") {
openNewWindow = false;
}
}
if(openNewWindow) {
var win = window.open("chrome://myextension/content/about.xul",
"windowName", "chrome");
}
最初のアプローチ(getEnumeratorとnsIDomChromeWindow)ではウィンドウが表示されますが、2回目に新しいウィンドウを開いた後、window.open()を使用して開いた新しいウィンドウが表示されませんでした。 getXULWindowEnumeratorとnsIXULWindowを使用すると、 'win.document is undefined'と表示されます。 –
@TomBrito nsIXULWindowインターフェイスは、この[link](http://www.oxymorical.com/experiments/apidocs/platform/1.9.2a1pre/interface/nsIXULWindow)のように見えますが、ドキュメント属性はありません。バットは私のアップデート – LeadingLight
@TomBritoをチェックアウトし、私はもう問題は何か分からないのですか?同じxulファイルから複数のウィンドウを開く場合は、空のウィンドウ名を使用する必要があります。それ以外の場合は、すでに開いている同じ名前のウィンドウをリフレッシュします。 – LeadingLight