P0b: document.currentScript.parentElement null für Dynamic Scripts #75

Closed
opened 2026-06-18 17:17:55 +00:00 by Artur · 1 comment
Owner

P0b: document.currentScript.parentElement null für Dynamic Scripts

Priority: HIGH
Betrifft: kit.svelte.dev, web.dev, speedtest.net, ALLE Seiten mit Inline-Scripts im <head>
Impact: Scripts crashen beim Start. SvelteKit-Seite kann nicht bootstrappen.

Problembeschreibung

Der DynamicScriptHandler führt Scripts aus, BEVOR sie im DOM attached sind.
document.currentScript wird zwar korrekt gesetzt (Sprint 12), aber das Script-Element
hat zu diesem Zeitpunkt .parentElement === null.

Aktueller Ablauf:

  1. Parser findet <script>-Tag
  2. ScriptLoader.fetchAndExecute() → fetch URL → get content
  3. ExecutionRealm.execute(code, scriptElement) → setzt __currentScript
  4. Script läuft: document.currentScript.parentElementnull (nicht attached)
  5. TypeError → Script bricht ab → App bootstrapped nicht

Gewünschtes Verhalten

Im Browser:

  1. Parser öffnet <script>-Tag
  2. Script wird in den DOM-Baum eingehängt (parent vorhanden)
  3. Script wird ausgeführt → currentScript.parentElement = korrektes DOM-Element

Option A: Script vor execute() attachien (EMPFEHLUNG)

// dynamic-scripts.ts — vor execute():
if (!scriptElement.parentNode) {
  const target = scriptElement.getAttribute('data-target') ?? document.head;
  const anchor = document.querySelector(target) ?? document.head.lastChild;
  if (anchor && anchor.parentNode) {
    anchor.parentNode.insertBefore(scriptElement, anchor.nextSibling);
  }
}

Akzeptanzkriterien

  • document.currentScript.parentElement ist niemals null während execution
  • kit.svelte.dev lädt ohne diesen TypeError
  • Kein Nebeneffekt auf andere Script-Ausführungen
  • Unit-Test: Script vor execute in DOM attached

Betroffene Dateien

Datei Änderung
src/js/dynamic-scripts.ts Script-Attachment vor execute
tests/unit/sprint16-currentscript.test.ts 5+ Tests
## P0b: `document.currentScript.parentElement` null für Dynamic Scripts **Priority:** HIGH **Betrifft:** kit.svelte.dev, web.dev, speedtest.net, ALLE Seiten mit Inline-Scripts im <head> **Impact:** Scripts crashen beim Start. SvelteKit-Seite kann nicht bootstrappen. ### Problembeschreibung Der DynamicScriptHandler führt Scripts aus, BEVOR sie im DOM attached sind. `document.currentScript` wird zwar korrekt gesetzt (Sprint 12), aber das Script-Element hat zu diesem Zeitpunkt `.parentElement === null`. **Aktueller Ablauf:** 1. Parser findet `<script>`-Tag 2. ScriptLoader.fetchAndExecute() → fetch URL → get content 3. ExecutionRealm.execute(code, scriptElement) → setzt `__currentScript` 4. Script läuft: `document.currentScript.parentElement` → **null** (nicht attached) 5. TypeError → Script bricht ab → App bootstrapped nicht ### Gewünschtes Verhalten Im Browser: 1. Parser öffnet `<script>`-Tag 2. Script wird in den DOM-Baum eingehängt (parent vorhanden) 3. Script wird ausgeführt → `currentScript.parentElement` = korrektes DOM-Element ### Option A: Script vor execute() attachien (EMPFEHLUNG) ```typescript // dynamic-scripts.ts — vor execute(): if (!scriptElement.parentNode) { const target = scriptElement.getAttribute('data-target') ?? document.head; const anchor = document.querySelector(target) ?? document.head.lastChild; if (anchor && anchor.parentNode) { anchor.parentNode.insertBefore(scriptElement, anchor.nextSibling); } } ``` ### Akzeptanzkriterien - [ ] `document.currentScript.parentElement` ist niemals null während execution - [ ] kit.svelte.dev lädt ohne diesen TypeError - [ ] Kein Nebeneffekt auf andere Script-Ausführungen - [ ] Unit-Test: Script vor execute in DOM attached ### Betroffene Dateien | Datei | Änderung | |-------|----------| | `src/js/dynamic-scripts.ts` | Script-Attachment vor execute | | `tests/unit/sprint16-currentscript.test.ts` | 5+ Tests |
Artur closed this issue 2026-06-18 17:27:08 +00:00
Author
Owner

Sprint 16 implementiertdocument.currentScript.parentElement Fix

Was wurde gemacht:

  • execution-realm.ts:execute(): Nur __currentScript setzen wenn scriptElement.parentNode existiert
  • parser.ts:makeScriptElement(): Fakes Script-Element hat jetzt parentNode = document.head + parentElement Getter
  • Verhindert TypeError bei SvelteKit/web.dev/speedtest Inline-Scripts

Commit: eca1765

✅ **Sprint 16 implementiert** — `document.currentScript.parentElement` Fix **Was wurde gemacht:** - `execution-realm.ts:execute()`: Nur `__currentScript` setzen wenn `scriptElement.parentNode` existiert - `parser.ts:makeScriptElement()`: Fakes Script-Element hat jetzt `parentNode = document.head` + `parentElement` Getter - Verhindert `TypeError` bei SvelteKit/web.dev/speedtest Inline-Scripts **Commit:** `eca1765`
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
glow-all/true-headless-browser#75
No description provided.