Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

script-Modul

Eingeschränkt verfügbar

Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.

Want more browser support for this feature? Tell us why.

Das script-Modul enthält Befehle und Ereignisse zum Ausführen von JavaScript und zum Verwalten von Realms im Browser.

Realms

JavaScript-Code wird in einer Ausführungsumgebung ausgeführt, die als Realm bezeichnet wird. Diese hat ein eigenes globales Objekt, beispielsweise Window für ein Dokument. Normalerweise hat ein Dokument einen Realm. Für jeden Worker und jedes Worklet, das zu ihm gehört, kann es jedoch einen zusätzlichen Realm geben.

In WebDriver BiDi hat jeder Realm eine eindeutige Zeichenfolge als Kennung, die Realm-ID genannt wird. Jeder Kontext (ein Tab oder ein iframe) hat mindestens einen Realm.

Realm-Typen

WebDriver BiDi definiert die folgenden Realm-Typwerte, gruppiert nach Ausführungsumgebung:

  • "window" steht für Dokument-Realms, einschließlich Sandbox-Realms.
  • "dedicated-worker", "shared-worker" und "service-worker" stehen für die entsprechenden Worker-Realms. "worker" steht für jeden anderen Worker-Realm.
  • "audio-worklet" und "paint-worklet" stehen für die entsprechenden Worklet-Realms. "worklet" steht für jeden anderen Worklet-Realm.

Realms identifizieren

Sie können einen Realm auf eine der folgenden Arten identifizieren:

  • Anhand seiner Realm-ID.
  • Anhand der ID des Kontexts, der ihn enthält, da jeder Kontext einen Realm für sein aktives Dokument hat.

Worker- und Worklet-Realms haben keine Kontext-ID. Sie können sie daher nur anhand ihrer Realm-ID identifizieren.

Befehle wie script.evaluate und script.callFunction verwenden einen target-Parameter, der entweder eine Realm-ID oder eine Kontext-ID akzeptiert. Wenn Sie eine Kontext-ID übergeben, wird das Skript im Realm des aktiven Dokuments dieses Kontexts ausgeführt.

Bei jeder Navigation zu einem anderen Dokument wird ein neues Dokument mit einem neuen Realm geladen. Eine Realm-ID von vor der Navigation ist daher nicht mehr gültig.

Sandbox-Realms

In WebDriver BiDi ist ein Sandbox-Realm ein benannter Realm, den Sie in einem Kontext erstellen.

Standardmäßig wird ein Skript, das Sie in einem Kontext auswerten, im Realm des aktiven Dokuments ausgeführt. Das bedeutet, dass Ihr Skript versehentlich globale Objekte verändern kann, von denen die Seite abhängt. Umgekehrt kann die Seite die Variablen lesen oder verändern, die Ihr Skript definiert.

Ein Sandbox-Realm verhindert dies. Er hat ein eigenes globales Objekt, das sowohl vom globalen Objekt des aktiven Dokuments als auch von denen aller anderen Sandbox-Realms in diesem Kontext getrennt ist. Skripte darin können auf denselben DOM zugreifen wie die Skripte der Seite, werden aber nicht durch Änderungen beeinflusst, die die Seite an eingebauten Objekten und DOM-APIs vornimmt. Die Skripte der Seite können nicht auf Variablen zugreifen, die von Skripten innerhalb eines Sandbox-Realms definiert wurden.

Es gibt keinen eigenen Befehl zum Erstellen eines Sandbox-Realms. Sie erstellen einen, indem Sie im target-Parameter des Befehls script.evaluate oder script.callFunction zusammen mit einer Kontext-ID einen Sandbox-Namen übergeben. Der Browser erstellt den Sandbox-Realm, wenn Sie diesen Namen in diesem Kontext zum ersten Mal verwenden. Jede Kombination aus einem Kontext und einem Sandbox-Namen hat genau einen Realm. Derselbe Sandbox-Name in zwei Kontexten ergibt daher zwei getrennte Realms.

Unterschiede zwischen Realms

Realms unterscheiden sich hinsichtlich ihres Zugriffs auf den DOM, ihrer Isolierung von den Skripten der Seite und der Art, wie Sie sie identifizieren:

Realm Zugriff auf den DOM Von den Skripten der Seite isoliert Identifizierung
Realm des aktiven Dokuments Ja Nein Realm-ID oder Kontext-ID
Sandbox-Realm Ja Ja Realm-ID oder Kontext-ID mit Sandbox-Namen
Worker- oder Worklet-Realm Nein Ja Nur Realm-ID

Befehle

Ereignisse

Spezifikationen

Spezifikation
WebDriver BiDi
# module-script

Browser-Kompatibilität