Signatur
Beschreibung
Das Screen-Interface liefert Informationen über den physischen bzw. logischen Bildschirm, auf dem das aktuelle Browserfenster gerade angezeigt wird. Eine Instanz legt man nicht selbst an. Der Browser stellt genau ein Objekt über window.screen (oder kurz screen) bereit. Einen öffentlichen Konstruktor gibt es nicht: new Screen() wirft einen TypeError.
Die wichtigsten Eigenschaften sind nur lesbar:
width/height: gesamte Bildschirmgröße in CSS-PixelnavailWidth/availHeight: nutzbare Fläche ohne Taskleiste, Dock o. Ä.colorDepth/pixelDepth: Farbtiefe in Bit (in der Praxis meist24)orientation: einScreenOrientation-Objekt mittype,angleund dem EreignischangeisExtended: gibt an, ob mehrere Bildschirme angeschlossen sind (Window Management API, nur in sicheren Kontexten)
Typische Einsatzzwecke sind Statistik und Analyse (Bildschirmauflösung), das sinnvolle Platzieren und Dimensionieren von Pop-up-Fenstern mit window.open(), Anpassungen an Hoch- oder Querformat sowie Anwendungen für mehrere Bildschirme (Präsentationen, Handelsplattformen). Für responsives Layout sind CSS-Media-Queries bzw. window.matchMedia() und die Fenstergröße (innerWidth/innerHeight) fast immer besser geeignet als die Bildschirmgröße.
Weil Screen von EventTarget erbt, kann es in Chromium-Browsern das Ereignis change auslösen. Das passiert, wenn sich Eigenschaften des Bildschirms ändern, etwa die Auflösung oder die verfügbare Fläche.
Rückgabewert
window.screen erhält man das eine Screen-Objekt des aktuellen Fensters. Es wird nicht per Konstruktor erzeugt.Beispiele
Bildschirmdaten auslesen
const { width, height, availWidth, availHeight, colorDepth } = window.screen;
console.log(`Auflösung: ${width}×${height}`);
console.log(`Nutzbar: ${availWidth}×${availHeight}`);
console.log(`Farbtiefe: ${colorDepth} Bit`);
console.log(`Physische Pixel (Breite): ${Math.round(width * devicePixelRatio)}`);
Pop-up zentriert im nutzbaren Bereich öffnen
const openCentered = (url, w = 600, h = 500) => {
const left = (screen.availLeft ?? 0) + Math.max(0, (screen.availWidth - w) / 2);
const top = (screen.availTop ?? 0) + Math.max(0, (screen.availHeight - h) / 2);
return window.open(url, 'login', `width=${w},height=${h},left=${left},top=${top}`);
};
document.querySelector('#login')
.addEventListener('click', () => openCentered('/oauth/start'));
Auf Wechsel zwischen Hoch- und Querformat reagieren
const updateLayout = () => {
const { type, angle } = screen.orientation;
document.body.dataset.orientation = type.startsWith('portrait') ? 'hoch' : 'quer';
console.log(`Ausrichtung: ${type} (${angle}°)`);
};
screen.orientation.addEventListener('change', updateLayout);
updateLayout();
// Später wieder abmelden:
// screen.orientation.removeEventListener('change', updateLayout);
Mehrere Bildschirme erkennen (Window Management API)
const listScreens = async () => {
if (!('isExtended' in screen) || !screen.isExtended) {
console.log('Nur ein Bildschirm verfügbar');
return;
}
// Fragt beim Nutzer die Berechtigung "window-management" an
const details = await window.getScreenDetails();
details.screens.forEach((s, i) => {
console.log(`#${i}: ${s.label} ${s.width}×${s.height}${s.isPrimary ? ' (primär)' : ''}`);
});
};
listScreens();
// Wichtig · Fallstricke
- CSS-Pixel statt Gerätepixel:
widthundheightwerden in CSS-Pixeln angegeben. Auf HiDPI- oder Retina-Displays und bei Browser-Zoom stimmen sie nicht mit der physischen Auflösung überein. Die Gerätepixel ergeben sich erst durch Multiplikation mitwindow.devicePixelRatio. - Kein Ersatz für die Fenstergröße: Die Bildschirmgröße sagt nichts darüber, wie groß das Browserfenster ist. Für das Layout verwendet man
innerWidth/innerHeight, Media-Queries oderResizeObserver. - Datenschutz und Fingerprinting: Bildschirmwerte eignen sich zum Wiedererkennen von Geräten. Firefox (mit
privacy.resistFingerprinting), der Tor Browser und Safari liefern daher unter Umständen gerundete oder gefälschte Werte.colorDepthist oft fest auf24gesetzt. - Nicht standardisiert:
availLeft/availTopsind nicht standardisiert, werden aber breit unterstützt.isExtended,getScreenDetails()und das Ereignischangegibt es derzeit nur in Chromium-Browsern und nur in sicheren Kontexten (HTTPS). Außerdem sind sie an die Berechtigungwindow-managementbzw. die Permissions-Policy gebunden. - Veraltete Eigenschaften: Die alten Methoden
screen.lockOrientation()undmozOrientationsind veraltet. Stattdessen verwendet manscreen.orientation.lock(), das meist nur im Vollbildmodus auf Mobilgeräten funktioniert. - Mehrere Bildschirme: Wird das Fenster auf einen anderen Monitor verschoben, bezieht sich
window.screenauf den neuen Bildschirm. Zwischengespeicherte Werte können dadurch veralten.