browsingContext.getTree-Befehl
Der browsingContext.getTree-Befehl des browsingContext-Moduls gibt den Baum aller Top-Level-Kontexte oder den Teilbaum, beginnend mit dem angegebenen Kontext, zurück.
Syntax
/* Without optional parameters */
{
"method": "browsingContext.getTree",
"params": {}
}
/* With optional parameters */
{
"method": "browsingContext.getTree",
"params": {
"maxDepth": 1,
"root": "93ee5bd6-d256-4608-a002-9a8995cc0e5f"
}
}
Parameter
Das params-Feld kann enthalten:
maxDepthOptional-
Eine nicht negative ganze Zahl, die die maximale Tiefe des zurückzugebenden Baums angibt. Wenn nicht einschlossen, was dem Wert
nullentspricht, wird der vollständige Baum zurückgegeben. Ein Wert von0gibt nur den Wurzelkontext selbst zurück. Zum Beispiel, wenn ein Top-Level-Kontext ein<iframe>enthält, das selbst ein weiteres<iframe>enthält, dann gibt einmaxDepthvon0nur den Top-Level-Kontext zurück; einmaxDepthvon1gibt den Top-Level-Kontext und das erste<iframe>zurück, aber nicht das geschachtelte. rootOptional-
Ein String, der die ID des Kontexts enthält, der als Wurzel des zurückgegebenen Baums verwendet werden soll. Kontext-IDs werden von Befehlen wie
browsingContext.createoder Ereignissen wiebrowsingContext.contextCreatedzurückgegeben. Wenn nicht eingeschlossen, werden alle Top-Level-Kontexte zurückgegeben.
Rückgabewert
Das result-Objekt in der Antwort enthält folgende Felder:
contexts-
Ein Array von Kontextobjekten, wobei jedes Objekt die Eigenschaften eines Kontexts darstellt. Jedes Objekt hat folgende Felder:
children-
Ein Array von Kontextobjekten, das die Kindkontexte dieses Kontexts darstellt. Jedes Kindobjekt hat dieselbe Struktur mit seinem eigenen
children-Array, was dies zu einer rekursiven Darstellung des Kontextbaums macht. Ein leeres Array zeigt an, dass der Kontext keine Kinder hat, während einnull-Wert darauf hinweist, dass Kinder aus der Antwort ausgeschlossen sind, etwa wenn dasmaxDepth-Limit erreicht ist. clientWindow-
Ein String, der die ID des Client-Fensters enthält, das diesen Kontext beinhaltet.
context-
Ein String, der die ID des Kontexts enthält.
originalOpener-
Ein String, der die ID des Kontexts enthält, der diesen Kontext ursprünglich geöffnet hat. Der Wert ist
null, wenn der Kontext direkt geöffnet wurde (nicht von einem anderen Kontext).Hinweis:
originalOpenerwird einmal gesetzt, wenn der Kontext erstellt wird. Es ändert sich nie und behält immer die ID des eröffnenden Kontexts bei. Dies unterscheidet sich von der JavaScript-window.opener-Eigenschaft, die auf das Fenster verweist, das das aktuelle Fenster geöffnet hat — es wirdnull, wenn dasrel=noopener-Attribut auf dem Link verwendet wird oder wenn dasnoopener-Fenstermerkmal inwindow.open()angegeben ist. parentOptional-
Ein String, der die ID des übergeordneten Kontexts enthält. Der Wert ist
null, wenn der Kontext kein übergeordneter ist. Dieses Feld ist nur für die Wurzelebenelemente im zurückgegebenen Array vorhanden. url-
Ein String, der die URL des Kontexts einschließlich des Fragments enthält.
userContext-
Ein String, der die ID des mit diesem Kontext verknüpften Benutzerkontexts enthält.
Fehler
invalid argument-
Ein erforderlicher Parameter fehlt oder hat einen ungültigen Typ.
no such frame-
Kein Kontext mit der angegebenen
root-ID wird gefunden.
Beispiele
>Abrufen aller Top-Level-Kontexte
Angenommen, Sie haben eine WebDriver BiDi-Verbindung und eine aktive Sitzung.
Angenommen, im Browser sind zwei Registerkarten geöffnet: Die erste Registerkarte unter https://example.com/page1.html hat ein <iframe>, das https://example.com/frame.html lädt, und die zweite Registerkarte zeigt https://example.com/page2.html:
Browser ├── https://example.com/page1.html (Tab 1) │ └── https://example.com/frame.html (<iframe>) └── https://example.com/page2.html (Tab 2)
Senden Sie die folgende Nachricht, um den vollständigen Kontextbaum zu erhalten:
{
"id": 1,
"method": "browsingContext.getTree",
"params": {}
}
Das contexts-Array listet die beiden Top-Level-Kontexte auf. Das <iframe> in Tab 1 erscheint verschachtelt unter seinen children. Der Browser antwortet wie folgt:
{
"id": 1,
"type": "success",
"result": {
"contexts": [
{
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f", // Tab 1
"children": [
// Tab 1 has one child <iframe>
{
"context": "6442450945", // The <iframe>
"children": [], // No child contexts
"originalOpener": null,
"url": "https://example.com/frame.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386"
}
],
"originalOpener": null,
"url": "https://example.com/page1.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386",
"parent": null
},
{
"context": "32ed30da-24ad-459d-8f0d-660526e92d96", // Tab 2
"children": [], // No child contexts
"originalOpener": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"url": "https://example.com/page2.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386",
"parent": null
}
]
}
}
Abrufen eines Teilbaums von einem bestimmten Kontext
Bei demselben Setup wie im vorherigen Beispiel senden Sie die folgende Nachricht, um nur Tab 1 und seinen unmittelbaren Kindkontext zu erhalten, wobei Tab 1s Kontext-ID als root und maxDepth auf 1 gesetzt ist:
{
"id": 2,
"method": "browsingContext.getTree",
"params": {
"root": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"maxDepth": 1
}
}
Der Browser antwortet mit Tab 1 und seinem unmittelbaren Kind. Das children-Feld für das iframe ist null; die maxDepth-Einstellung von 1 begrenzt die Antwort auf eine Ebene unterhalb der Wurzel, sodass die eigenen Kinder des <iframe> nicht eingeschlossen sind:
{
"id": 2,
"type": "success",
"result": {
"contexts": [
{
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"children": [
{
"context": "6442450945",
"children": null,
"originalOpener": null,
"url": "https://example.com/frame.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386"
}
],
"originalOpener": null,
"url": "https://example.com/page1.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386",
"parent": null
}
]
}
}
In diesem Beispiel, wenn der root-Parameter der browsingContext.getTree-Nachricht auf die Kontext-ID des iframes ("6442450945") gesetzt würde, wäre das parent-Feld des <iframe> in der Antwort "93ee5bd6-d256-4608-a002-9a8995cc0e5f" (die Kontext-ID von Tab 1) statt null.
Um die Suche nur auf den Wurzelkontext ohne Kinder zu beschränken, setzen Sie maxDepth auf 0:
{
"id": 3,
"method": "browsingContext.getTree",
"params": {
"root": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"maxDepth": 0
}
}
Der Browser antwortet wie folgt:
{
"id": 3,
"type": "success",
"result": {
"contexts": [
{
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"children": null,
"originalOpener": null,
"url": "https://example.com/page1.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386",
"parent": null
}
]
}
}
Identifizieren des Öffners eines Kontexts
Erweiternd zum gleichen Setup, betrachten Sie, dass Tab 2 (https://example.com/page2.html) von Tab 1 (https://example.com/page1.html) mit window.open() geöffnet wurde. Senden Sie die folgende Nachricht, um zu sehen, wie diese Beziehung in der Antwort vermittelt wird:
{
"id": 4,
"method": "browsingContext.getTree",
"params": {}
}
Der Browser antwortet mit dem vollständigen Kontextbaum. Das originalOpener-Feld identifiziert den Kontext, der Tab 2 geöffnet hat:
{
"id": 4,
"type": "success",
"result": {
"contexts": [
{
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"children": [
{
"context": "6442450945",
"children": [],
"originalOpener": null,
"url": "https://example.com/frame.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386"
}
],
"originalOpener": null, // Opened directly
"url": "https://example.com/page1.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386",
"parent": null
},
{
"context": "32ed30da-24ad-459d-8f0d-660526e92d96",
"children": [],
"originalOpener": "93ee5bd6-d256-4608-a002-9a8995cc0e5f", // Opened by Tab 1
"url": "https://example.com/page2.html",
"userContext": "default",
"clientWindow": "08c697a1-2664-447d-9c88-52bcee3bb386",
"parent": null
}
]
}
}
Spezifikationen
| Spezifikation |
|---|
| WebDriver BiDi> # command-browsingContext-getTree> |
Browser-Kompatibilität
Siehe auch
browsingContext.activate-BefehlbrowsingContext.close-BefehlbrowsingContext.create-BefehlbrowsingContext.contextCreated-EreignisbrowsingContext.contextDestroyed-Ereignis