Signatur
Beschreibung
Das Interface BarProp steht für ein Element der Browser-Oberfläche, auf das Skripte zugreifen können. Man erzeugt es nicht selbst. Stattdessen stellt jedes Window-Objekt sechs fertige Instanzen bereit: window.locationbar, window.menubar, window.personalbar, window.scrollbars, window.statusbar und window.toolbar.
Das Interface hat nur eine Eigenschaft: visible. Sie ist schreibgeschützt und liefert einen booleschen Wert. Laut aktuellem HTML-Standard bedeutet dieser Wert nicht mehr, dass eine bestimmte Leiste wirklich sichtbar ist. Er zeigt nur an, ob das Fenster ein Popup ist. In einem normalen Tab oder Fenster ist visible bei allen sechs Objekten true. In einem Popup, das mit window.open() und Fenstermerkmalen wie popup oder width/height geöffnet wurde, ist der Wert bei allen false.
In der Praxis nutzt man BarProp deshalb fast nur, um zu erkennen, ob eine Seite in einem Popup läuft. So kann man zum Beispiel das Layout eines OAuth-Anmeldedialogs vereinfachen oder einen Schließen-Button einblenden. Leisten ein- oder ausblenden kann man damit nicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $visible | boolean | Schreibgeschützte Eigenschaft. true in normalen Fenstern und Tabs, false, wenn das Fenster als Popup geöffnet wurde. |
Rückgabewert
BarProp-Instanz nur über die Eigenschaften von window (locationbar, menubar, personalbar, scrollbars, statusbar, toolbar). Einen öffentlichen Konstruktor gibt es nicht.Beispiele
Alle BarProp-Objekte eines Fensters auslesen
const bars = ['locationbar', 'menubar', 'personalbar', 'scrollbars', 'statusbar', 'toolbar'];
for (const name of bars) {
console.log(`${name}.visible:`, window[name].visible);
}
console.log(window.toolbar instanceof BarProp);
Erkennen, ob die Seite in einem Popup läuft
// z. B. auf einer Login-Seite, die per window.open(url, 'login', 'popup,width=500,height=600') geöffnet wird
const isPopup = !window.locationbar.visible;
if (isPopup) {
document.body.classList.add('popup-layout');
const closeBtn = document.createElement('button');
closeBtn.textContent = 'Fenster schließen';
closeBtn.addEventListener('click', () => window.close());
document.body.append(closeBtn);
}
console.log('Popup-Modus:', isPopup);
Kein Konstruktor und kein Schreibzugriff
try {
new BarProp();
} catch (err) {
console.log(err.name); // TypeError: Illegal constructor
}
// Im Sloppy Mode wird die Zuweisung stillschweigend ignoriert (im Strict Mode: TypeError)
window.toolbar.visible = false;
console.log(window.toolbar.visible);
// Wichtig · Fallstricke
- Aussage ist ungenau: Moderne Browser geben absichtlich für alle sechs Objekte denselben Wert zurück. Er hängt nur davon ab, ob das Fenster ein Popup ist. Ob der Nutzer die Lesezeichenleiste oder die Menüleiste wirklich ausgeblendet hat, erfährt man so nicht. Das dient dem Schutz vor Fingerprinting.
- Schreibgeschützt: Früher konnten privilegierte Skripte in Firefox
visiblesetzen. Heute wird eine Zuweisung ignoriert, im Strict Mode wirft sie einenTypeError. Leisten lassen sich per Skript nicht steuern. - Kein Konstruktor:
new BarProp()wirftTypeError: Illegal constructor. - Popup-Erkennung: Ob ein Popup vorliegt, entscheidet der Browser anhand der
windowFeaturesvonwindow.open(). Ein Aufruf ohne Merkmale öffnet normalerweise einen neuen Tab, und dort istvisible === true. - Kompatibilität: Wird in allen aktuellen Browsern unterstützt. Das vereinheitlichte Popup-Verhalten gibt es etwa seit Chrome 99, Firefox 98 und Safari 15.4. Ältere Versionen können abweichende Werte liefern.