Signatur
Beschreibung
window.moveTo() setzt die Position eines Browserfensters auf absolute Bildschirmkoordinaten in CSS-Pixeln. Gemeint ist dabei immer die linke obere Ecke des äußeren Fensterrahmens. Wenn du das Fenster stattdessen relativ zur aktuellen Position verschieben willst, nimm window.moveBy().
In der Praxis funktioniert die Methode nur noch in engen Grenzen. Aktuelle Browser ignorieren den Aufruf, wenn das Fenster nicht per window.open() geöffnet wurde oder wenn es mehr als einen Tab enthält. Nützlich ist sie also vor allem für Popup-Fenster, die dein eigenes Skript erzeugt hat, etwa für Hilfefenster, OAuth-Anmeldedialoge oder Werkzeugpaletten.
Die Koordinaten beziehen sich auf den gesamten Bildschirmbereich. Bei mehreren Monitoren können sie auch negativ sein. Liegt die Zielposition außerhalb des sichtbaren Bereichs, schieben viele Browser das Fenster wieder in den sichtbaren Bereich zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | Horizontale Zielposition der linken Fensterkante in CSS-Pixeln, gemessen vom linken Bildschirmrand. | |
| $y Pflicht | number | Vertikale Zielposition der oberen Fensterkante in CSS-Pixeln, gemessen vom oberen Bildschirmrand. |
Rückgabewert
undefined). Ob das Fenster wirklich verschoben wurde, lässt sich nur nachträglich über screenX/screenY prüfen.Beispiele
Popup öffnen und in die linke obere Ecke setzen
const popup = window.open('/hilfe.html', 'hilfe', 'popup,width=400,height=300');
if (popup) {
// Nur bei selbst geöffneten Fenstern erlaubt
popup.moveTo(0, 0);
}
Popup auf dem Bildschirm zentrieren
const breite = 500;
const hoehe = 600;
const popup = window.open('/login', 'login', `popup,width=${breite},height=${hoehe}`);
if (popup) {
const x = window.screen.availLeft + (window.screen.availWidth - breite) / 2;
const y = window.screen.availTop + (window.screen.availHeight - hoehe) / 2;
popup.moveTo(Math.round(x), Math.round(y));
}
Prüfen, ob die Verschiebung gewirkt hat
const popup = window.open('about:blank', 'test', 'popup,width=300,height=200');
if (popup) {
popup.moveTo(100, 150);
// Kurz warten, weil manche Fenstermanager asynchron reagieren
setTimeout(() => {
const ok = popup.screenX === 100 && popup.screenY === 150;
console.log(ok ? 'Fenster verschoben' : 'moveTo wurde ignoriert oder angepasst');
}, 100);
}
// Wichtig · Fallstricke
- Einschränkungen: Seit Firefox 7 und in allen aktuellen Chromium- und WebKit-Browsern greift
moveTo()nur bei Fenstern, die perwindow.open()erzeugt wurden und genau einen Tab enthalten. Im Hauptfenster passiert in der Regel nichts. Es gibt dann weder einen Fehler noch eine Warnung. - Mobile Browser (iOS Safari, Chrome für Android) ignorieren die Methode vollständig.
- Rufst du die Methode auf einem Fenster eines anderen Ursprungs auf, können Browser den Aufruf blockieren. Warte bei Popups deshalb nicht erst auf Navigationen zu fremden Domains, sondern setze die Position direkt nach dem Öffnen oder übergib sie gleich per
left=/top=im Feature-String vonwindow.open(). Das ist zuverlässiger. - Fenstermanager, zum Beispiel unter Wayland oder in Kachel-Layouts, können die Position eigenmächtig ändern. Die tatsächliche Position kann also vom angeforderten Wert abweichen.
- Popup-Blocker verhindern oft schon
window.open(). Prüfe den Rückgabewert daher immer aufnull. - Die Verschiebung ist
moveTo()gegenüber Nutzern oft lästig. Setze sie sparsam ein und nur als Reaktion auf eine Nutzeraktion.