Signatur
Beschreibung
UIEvent.view verweist auf das Fenster (genauer: den WindowProxy), in dem ein Benutzeroberflächen-Ereignis entstanden ist. Die Eigenschaft steht bei allen von UIEvent abgeleiteten Ereignissen zur Verfügung, etwa MouseEvent, KeyboardEvent, FocusEvent, InputEvent, PointerEvent, TouchEvent und WheelEvent.
Praktisch ist view vor allem dann, wenn ein einzelner Handler Ereignisse aus mehreren Browsing-Kontexten verarbeitet, also aus dem Hauptdokument und aus gleich-originigen <iframe>-Elementen oder Pop-up-Fenstern. Über event.view erreicht man dann das richtige window, zum Beispiel um getComputedStyle(), getSelection() oder Scroll-Positionen des passenden Fensters abzufragen.
Bei echten, vom Browser ausgelösten Ereignissen ist view in der Regel das Fenster des Dokuments. Wird ein Ereignis per Skript mit new MouseEvent() o. Ä. erzeugt, ist view standardmäßig null, außer man übergibt im Initialisierungsobjekt ausdrücklich view: window.
Rückgabewert
null, wenn keines angegeben wurde (z. B. bei synthetischen Ereignissen ohne view-Option).Beispiele
Fenster eines Klick-Ereignisses ermitteln
document.addEventListener('click', (event) => {
console.log(event.view === window);
console.log(event.view.innerWidth > 0);
});
Ereignisse aus einem gleich-originigen iframe unterscheiden
const frame = document.querySelector('iframe');
const handleKey = (event) => {
const quelle = event.view === window ? 'Hauptfenster' : 'iframe';
// Auswahl im jeweils richtigen Fenster lesen
const auswahl = event.view?.getSelection()?.toString() ?? '';
console.log(`${quelle}: Taste ${event.key}, Auswahl: "${auswahl}"`);
};
document.addEventListener('keydown', handleKey);
frame.addEventListener('load', () => {
frame.contentDocument.addEventListener('keydown', handleKey);
});
Synthetisches Ereignis mit und ohne view
const ohneView = new MouseEvent('click');
const mitView = new MouseEvent('click', { view: window, bubbles: true });
console.log(ohneView.view);
console.log(mitView.view === window);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
event.viewwird stillschweigend ignoriert (im Strict Mode gibt es einenTypeError). Den Wert legt man nur über dieview-Option im Konstruktor fest. - Synthetische Ereignisse: Ohne
view-Option ist der Wertnull. Code, der sich aufevent.viewverlässt, sollte deshalb optionales Verketten (event.view?.…) nutzen. - Die
view-Option muss einWindowodernullsein, sonst wirft der Konstruktor einenTypeError. - Fremde Ursprünge: Kommt das Fenster von einem anderen Ursprung, kann man über den
WindowProxynur auf wenige Eigenschaften zugreifen (z. B.postMessage). Alles andere löst einenSecurityErroraus. - Einfache
Event-Objekte (z. B.load,change) sind keineUIEvents und haben keineview-Eigenschaft. - Die Eigenschaft wird von allen modernen Browsern unterstützt. Die veraltete Methode
initUIEvent()sollte man nicht mehr verwenden.