Signatur
Beschreibung
Die Eigenschaft visible gehört zur Schnittstelle BarProp. Instanzen davon erreicht man über die Fenster-Eigenschaften window.locationbar, window.menubar, window.personalbar, window.scrollbars, window.statusbar und window.toolbar. Jede davon steht für ein Element der Browser-Oberfläche außerhalb des Seiteninhalts.
Laut aktueller HTML-Spezifikation liefern Browser aus Datenschutzgründen keine echten Angaben mehr zu den einzelnen Leisten. Stattdessen geben alle sechs BarProp-Objekte denselben Wert zurück: false, wenn das Fenster ein Popup ist (etwa durch window.open() mit Größen- oder Feature-Angaben geöffnet), und sonst true. Praktisch nutzt man visible deshalb vor allem, um zu erkennen, ob die eigene Seite in einem minimalen Popup-Fenster läuft.
Brauchbar ist das zum Beispiel für OAuth- oder Zahlungs-Popups, die sich anders verhalten sollen als ein normaler Tab. Denkbar ist etwa ein „Fenster schließen“-Button statt einer vollständigen Navigation. Auch Layout-Anpassungen für kleine Hilfsfenster sind möglich.
Rückgabewert
true, wenn das Bedienelement als sichtbar gilt (normales Fenster oder normaler Tab), false, wenn das Fenster ein Popup ist. Die Eigenschaft ist schreibgeschützt.Beispiele
Sichtbarkeit aller Leisten ausgeben
const bars = ['locationbar', 'menubar', 'personalbar', 'scrollbars', 'statusbar', 'toolbar'];
for (const name of bars) {
console.log(`${name}: ${window[name].visible}`);
}
Erkennen, ob die Seite in einem Popup läuft
const isPopup = !window.toolbar.visible;
if (isPopup) {
// Im Popup: kompaktes Layout und Schließen-Button anzeigen
document.body.classList.add('popup-mode');
const btn = document.createElement('button');
btn.textContent = 'Fenster schließen';
btn.addEventListener('click', () => window.close());
document.body.append(btn);
}
console.log(isPopup ? 'Popup-Fenster' : 'Normales Fenster');
Popup öffnen und dessen Status prüfen
// Größenangaben führen dazu, dass ein Popup geöffnet wird
const popup = window.open('/login', 'login', 'popup,width=480,height=600');
popup?.addEventListener('load', () => {
// Funktioniert nur bei gleicher Origin
console.log('Adressleiste sichtbar?', popup.locationbar.visible);
});
// Wichtig · Fallstricke
- Keine echte Aussage pro Leiste: Moderne Browser geben für alle
BarProp-Objekte denselben Wert zurück. Das soll Fingerprinting verhindern. Ob der Nutzer etwa die Lesezeichenleiste ausgeblendet hat, lässt sich damit nicht feststellen. - Schreibgeschützt: Früher erlaubten manche Browser (z. B. Firefox mit erweiterten Rechten) das Setzen von
visible. Heute wird eine Zuweisung stillschweigend ignoriert und löst im Strict Mode keinen Fehler aus. - Uneinheitliches Verhalten in älteren Browsern: Vor der Vereinheitlichung (ungefähr 2021/2022) lieferten Chrome, Firefox und Safari teils abweichende Werte, z. B. immer
true. Für eine robuste Popup-Erkennung kann man zusätzlichwindow.openerprüfen. - Zugriff über Fenstergrenzen hinweg: Auf
popup.toolbar.visibleeines anderen Fensters kann man nur bei gleicher Origin zugreifen, sonst wird einSecurityErrorgeworfen.