Sprint 2: Inline Scripts blockieren Module Execution (per HTML Spec) #51
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#51
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?
Problembeschreibung
Inline
<script>-Blöcke (Config-Variablen wie__VP_HASH_MAP__,__INITIAL_STATE__,__OVERLAY__) laufen aktuell fire-and-forget viahandler.loader.executeRaw(content, "inline").catch(...)— ohneawait. Module können starten BEVOR die Inline-Config gesetzt ist.Aktueller Code in
dynamic-scripts.ts:_patchConnectedToDocument():Lösungsansatz
Option A: connectedToDocument blockieren — Inline-Script-Handler macht
executeRawsynchron (es ist bereits synchron intern), aber die Module queue muss warten bis alle Inline-Scripts durch sind.Option B: Module Queue pausieren —
executeModuledarf erst starten wenn alle Inline-Scripts aus dem Parser-Durchlauf fertig sind.Option C: Parser-Flag —
IncrementalParsersetzt_allInlineScriptsProcessed-Flag, Module checken das.Akzeptanzkriterien
window.__CFG__ = "hello"ist gesetzt BEVORtype="module"-Script läuftwindow.__CFG__und__CFG__(bare global)Betroffene Dateien
src/js/dynamic-scripts.tssrc/js/script-loader.tssrc/dom/parser.tsCross-Ref
a274576): Module Sub-Import Resolution + Window Property ShimsImplemented in
ab5558a— fundamentale Änderung der Script-Ausführungsreihenfolge im Parser:Früher (fehlerhaft):
Jetzt (browser-accuracy):
Neues Flag:
DynamicScriptHandler._parserHandledScripts = trueExtrahiert:
ExecutionRealm._syncGlobalsToGlobalThis()Noch offen: vuejs.org
__VP_HASH_MAP__— die Inline-Script-Setzung läuft korrekt, aber der Wert wird noch nicht zuverlässig nach globalThis synchronisiert. Ursache muss tiefer debuggt werden (vermutlich JSON.parse-Fehler im Inline-Script).Abgeschlossen ✅
Root Cause Chain:
mode="strict"(nichtproduction) — strict proxy hatte keineownKeys/getOwnPropertyDescriptorTrapsObject.keys(proxyWindow)zeigte keinedynamicStorage-Einträge →_syncGlobalsToGlobalThis()fand__VP_HASH_MAP__nichttype="module"ohnesrc) wurden nie gefüttert (Parser Step 6 filterte nursrc-Scripts)Fixes (
7189e6f,a67191d):ownKeys+getOwnPropertyDescriptorTraps hinzugefügt_buildModulePrologue()injiziert nicht-standard__XXX__Globals alsvar-DeklarationenScriptLoader.onScriptTag()gegeben_syncGlobalsToGlobalThis()kopiert proxy-window → globalThisTest:
tests/issue-51-vphashmap-sync.test.ts✅ PASS__VP_HASH_MAP__,__CFG__type="module") sieht beide als Bare-Globalsdocumentundwindowim Module Scope OKNoch offen: vuejs.org →
ReferenceError: document is not defined(vue runtime, separater Issue)