Standalone-Betrieb

Standalone ist der Zustand, den ein Dashlet annimmt, wenn es außerhalb jeder enaio-Umgebung läuft — ein einfacher Browser-Tab, ein Dev-Server oder jede Nicht-enaio-Einbettung: kein Bridge, keine Events. Es ist ein vollwertiger Zustand, kein Fehler.

1. Wie man in den Standalone-Zustand gelangt

Es gibt kein explizites Flag. Die Erkennungs-Zustandsmaschine (siehe Umgebungen und Erkennung) läuft einfach ab: wenn kein Rich-Client-Bridge und kein akzeptiertes Webclient-Event innerhalb der Erkennungs-Obergrenze (detectionTimeoutMs, Standard 5000 ms) eintreffen, löst sich das Dashlet als Standalone auf. Es ist niemals ein Hang — der Zustand wird in begrenzter Zeit erreicht und ist über das normale init-Promise beobachtbar.

Zwei weitere Ecken erreichen denselben Zustand:

  • Top-Level-Fenster, kein konfigurierter Origin: Origin-Lernen funktioniert nur in einem iframe. Ein Top-Level-Fenster ohne konfigurierten Origin lernt nie und degradiert nach Ablauf der Erkennungs-Obergrenze in den Standalone-Zustand (siehe Origin-Konfiguration).

  • Foreign-origin-Host: Ein Webclient-artiges onInit, das von einem Origin gepostet wird, die die Validierung scheitert, wird abgelehnt; nichts wird initialisiert, und das Dashlet degradiert innerhalb derselben begrenzten Obergrenze in den Standalone-Zustand.

2. Was ein Standalone-Dashlet tut

Fläche Verhalten

dashlet.init

Löst sich genau einmal auf und wird niemals abgelehnt, mit environment: 'standalone' und einer leer/fehlenden Auswahl — der Degradationszustand ist ein beobachtbarer Fallback, kein Fehler

onInit / onUpdate-Listener

Werden normal registriert; sie spielen das Standalone-Init nach und feuern nie Updates

call(method, params)

Wird mit dem begrenzten TimeoutError abgelehnt (es gibt keinen Host-Antwortsweg)

Alle sieben portablen Fassade-Methoden

Wie call(): jede wird mit dem begrenzten TimeoutError abgelehnt

Die Regel für Dashlet-Code: einen Fallback rendern, statt zu warten. Das init-Promise ist der Ort für die Zweigung — wenn ctx.environment === 'standalone' ist, zeigen Sie Ihre Offline-/Degradierungs-UI und `await`en keinen Host-Aufruf.

3. Die Timeout-Mechanik

Jede Host-Interaktion, die auf eine Antwort wartet, ist begrenzt: das Init-Warten durch die Erkennungs-Obergrenze (detectionTimeoutMs, Standard 5000 ms) plus einem 250-ms-Sicherheitsnetz, jeder Methodenaufruf durch den Antwort-Timeout (timeoutMs, Standard 5000 ms). Ein Timeout wird mit dem eigenständigen TimeoutError abgelehnt (Fehlername DashletTimeoutError, trägt die Operation und die erzielte Timeout), so dass Dashlet-Code „Host hat nie geantwortet" von jedem anderen Fehler unterscheiden kann:

import { TimeoutError } from 'ecmind-blue-dashlet';

await dashlet.openIndexData({ inNewTab: false, mode: 'view', objectId: '1024' })
    .catch((e) => {
        if (e instanceof TimeoutError) {
            showFallback(); // Standalone oder toter Host — keine Retry-Schleife
        }
        throw e;
    });

Der enaio-Vertrag definiert keine Antwortgarantie; die Grenze macht „keine Antwort" zu einem beobachtbaren Zustand.

4. Die Regler justieren

Option Standard Bedeutung im Standalone-Zusammenhang

detectionTimeoutMs

5000

Erkennungs-Obergrenze: wie lange das Dashlet nach einer Bridge sucht / auf ein onInit wartet, bevor es Standalone meldet

timeoutMs

5000

Antwort-Timeout für jeden Methodenaufruf — im Standalone bestimmt er, wie schnell jeder Fassade-Aufruf mit TimeoutError abgelehnt wird

pollIntervalMs

50

Rich-Client-Bridge-Poll-Intervall (kein Einfluss auf Standalone, aber Teil derselben Justierung: eine späte Bridge wird durch Polling innerhalb der Erkennungs-Obergrenze gefangen)