Event-Reihenfolge korrigieren — focusin/focusout, Pointer-Sequenz, isTrusted #32
Labels
No labels
bug
docs
feature
housekeeping
html-spec
performance
react-compat
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
glow-all/true-headless-browser#32
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
React Event-System erwartet exakte Event-Reihenfolge wie im realen Browser. Unsere Event-Dispatch-Engine (EventDispatcher + Interaction-API) hat drei Lücken:
1. Focus-Reihenfolge (React onFocus/onBlur)
Real Browser:
Unsere Engine:
focus()setzt nurdocument.activeElement+ dispatht ein einzelnes FocusEvent.blur()analog.focusin/focusoutfehlen oft oder sind falsch gereiht.2. Pointer-Event-Sequenz (React onClick)
Real Browser:
Unsere Engine (dispatch.ts):
dispatchClick()— Reihenfolge stimmt, aber PointerEvents haben teilweise fehlende Properties (pointerType,pressure,button).3. isTrusted für alle dispatched Events
React 18+ prüft
isTrustedin manchen Code-Pfaden. Wir setzen es viaObject.defineProperty, aber nicht alle Events bekommen es.Option A: dispatch.ts refactorn (Empfohlen)
Ein einzelner Fix-Durchlauf in
src/interaction/dispatch.ts:Focus-Reihenfolge fix
Pointer-Properties fix
Sicherstellen dass PointerEvent-Properties
pointerType,pressure,button,buttons,clientX/Y,pageX/Y,screenX/Ykorrekt gesetzt sind.isTrusted global setzen
Einmal im Dispatcher-Konstruktor oder als Wrapper:
Option B: Event-Pipeline-Validator
Validator bauen, der alle dispatched Events gegen eine Referenz-Liste prüft (selbes Problem — mehr Code fürs gleiche Ergebnis).
Akzeptanzkriterien
focus(el)dispatht: focusout(old) → blur(old) → focusin(new) → focus(new)blur(el)dispatht focusout/blur auf elclick(el)dispatht pointerover → mouseover → pointerdown → mousedown → pointerup → mouseup → clickisTrusted === trueauf ALLEN dispatched EventsrelatedTargetist korrekt gesetzt (alt↔neu bei focus/blur)Betroffene Dateien
src/interaction/dispatch.tstests/interaction/event-sequence.test.tsTests
Cross-Referenzen