script.callFunction-Befehl
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.
Der Befehl script.callFunction des Moduls script ruft die angegebene Funktion mit den übergebenen Argumenten in einem Realm auf und gibt das Ergebnis der Funktion zurück.
Syntax
/* With required parameters */
{
"method": "script.callFunction",
"params": {
"awaitPromise": false,
"functionDeclaration": "() => document.title",
"target": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f"
}
}
}
/* With required and optional parameters */
{
"method": "script.callFunction",
"params": {
"arguments": [
{
"type": "number",
"value": 3
}
],
"awaitPromise": false,
"functionDeclaration": "function (quantity) { return this.price * quantity; }",
"resultOwnership": "root",
"serializationOptions": {
"includeShadowTree": "open",
"maxDomDepth": 1,
"maxObjectDepth": 2
},
"target": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f",
"sandbox": "myAutomationSandbox"
},
"this": {
"type": "object",
"value": [
[
"price",
{
"type": "number",
"value": 5
}
]
]
},
"userActivation": true
}
}
Parameter
Das Feld params enthält:
argumentsOptional-
Ein Array von Objekten, die die Werte darstellen, die der Funktion als Argumente übergeben werden. Ihre Reihenfolge entspricht der Reihenfolge im Array. Der Browser wandelt jedes Objekt in einen JavaScript-Wert um, bevor er die Funktion aufruft. Wird der Parameter weggelassen, wird die Funktion ohne Argumente aufgerufen.
Um einen primitiven oder strukturierten JavaScript-Wert zu beschreiben oder einen Kanal zum Senden von Nachrichten an den Client zu konfigurieren, verwendet das Objekt eine Kombination aus
typeund dem optionalen Feldvalue. Das Format des Feldsvaluehängt vom Feldtypeab. Um auf ein vorhandenes JavaScript-Objekt oder einen DOM-Knoten zu verweisen, verwendet das Objekt stattdessen das FeldhandleodersharedId.type-
Ein String, der den Typ des Werts angibt, der an die Funktion übergeben werden soll. Er kann einen der folgenden Werte annehmen:
- Für einen primitiven JavaScript-Wert:
"bigint","boolean","null","number","string"oder"undefined". - Für einen strukturierten JavaScript-Wert:
"array","date","map","object","regexp"oder"set". - Für eine vom Browser erstellte Funktion, die Nachrichten an den Client sendet:
"channel". Der Browser übergibt diese Funktion als Argument an die aufgerufene Funktion. Jeder Aufruf der vom Browser erstellten Funktion sendet einscript.message-Ereignis an einen abonnierten Client. Die vom Browser erstellte Funktion akzeptiert ein einzelnes Argument. Um mehrere Werte in einer Nachricht zu senden, übergeben Sie ein Objekt oder ein Array.
- Für einen primitiven JavaScript-Wert:
valueOptional-
Je nach
typeein Array, ein boolescher Wert, eine Zahl, ein Objekt oder ein String, der den zu übergebenden Wert angibt. Dieses Feld ist nicht verfügbar, wenntype"null"oder"undefined"ist. Für alle anderentype-Werte ist es erforderlich.-
Wenn
type"array"ist, istvalueein Array von Objekten. Jedes Objekt beschreibt ein Array-Element mit denselben Feldern wie ein Objekt im Parameterarguments:typeund optionalvalueoderhandleodersharedId. -
Wenn
type"bigint"ist, istvalueein String, der die Ganzzahl darstellt. -
Wenn
type"boolean"ist, istvaluetrueoderfalse. -
Wenn
type"channel"ist, istvalueein Objekt, das den Kanal konfiguriert. Dies ist dieselbe Kanalkonfiguration, die im Parameterargumentsvonscript.addPreloadScriptverwendet wird. Sie enthält die folgenden Felder:channel-
Ein String, der den Kanal in den resultierenden
script.message-Ereignissen identifiziert. ownershipOptional-
Ein String, der angibt, ob der Browser eine Referenz auf das in jeder Nachricht gesendete Objekt behält. Er akzeptiert dieselben Werte und hat denselben Standardwert wie der Parameter
resultOwnership. serializationOptionsOptional-
Ein Objekt, das steuert, wie viele Details in jeder Nachricht enthalten sind. Es hat dieselben Felder und Standardwerte wie der Parameter
serializationOptions.
-
Wenn
type"date"ist, istvalueein String im Format für Datums- und Uhrzeit-Strings. -
Wenn
type"map"ist, istvalueein Array, das die Einträge einer JavaScript-Mapbeschreibt. Jedes Element im Array ist ein weiteres Array mit genau zwei Elementen: einem Schlüssel, gefolgt von seinem Wert. Der Schlüssel ist ein String oder ein Objekt, das einen JavaScript-Wert darstellt. Der Wert ist ein Objekt, das einen JavaScript-Wert darstellt.Objekte, die als Schlüssel oder Werte verwendet werden, verwenden dieselben Felder wie ein Objekt im Parameter
arguments:typeund optionalvalueoderhandleodersharedId. -
Wenn
type"number"ist, istvalueeine Zahl oder der String"-0","-Infinity","Infinity"oder"NaN". -
Wenn
type"object"ist, istvalueein Array, das die Eigenschaften eines JavaScript-Objekts beschreibt. Jedes Element im Array ist ein weiteres Array mit genau zwei Elementen: einem Schlüssel, gefolgt von seinem Wert. Der Schlüssel ist ein String oder ein Objekt, das einen JavaScript-Wert darstellt. Der Wert ist ein Objekt, das einen JavaScript-Wert darstellt.Objekte, die als Schlüssel oder Werte verwendet werden, verwenden dieselben Felder wie ein Objekt im Parameter
arguments:typeund optionalvalueoderhandleodersharedId. -
Wenn
type"regexp"ist, istvalueein Objekt mit den folgenden Feldern:flagsOptional-
Ein String, der die Flags für reguläre Ausdrücke angibt.
pattern-
Ein String, der das Muster des regulären Ausdrucks enthält.
-
Wenn
type"set"ist, istvalueein Array von Objekten. Jedes Objekt beschreibt ein Set-Element mit denselben Feldern wie ein Objekt im Parameterarguments:typeund optionalvalueoderhandleodersharedId. -
Wenn
type"string"ist, istvalueein String.
-
handle-
Ein String mit einer ID, über die auf ein vorhandenes JavaScript-Objekt verwiesen wird, das an die Funktion übergeben werden soll. Verwenden Sie dieses Feld anstelle der Felder
typeundvaluedes Parametersarguments. Wenn sowohlhandleals auchsharedIdangegeben sind, wirdhandleignoriert. Ein Handle kann nur in dem Realm verwendet werden, in dem es erstellt wurde.Handles für Objekte werden von Befehlen wie
script.evaluateoder einem vorherigenscript.callFunction-Befehl zurückgegeben, wennresultOwnershipauf"root"gesetzt ist. -
Ein String mit einer ID, über die auf einen vorhandenen DOM-Knoten verwiesen wird, der an die Funktion übergeben werden soll. Verwenden Sie dieses Feld anstelle der Felder
typeundvaluedes Parametersarguments. Diese ID kann realmübergreifend verwendet werden, auch in Sandbox-Realms, sofern diese auf denselben Knoten zugreifen können.Gemeinsame IDs werden von Befehlen wie
browsingContext.locateNodeszurückgegeben.
awaitPromise-
Ein boolescher Wert, der angibt, wie mit einem von der Funktion zurückgegebenen Promise umgegangen wird.
true: Wenn die Funktion ein Promise zurückgibt, wartet der Browser, bis das Promise erfüllt oder abgelehnt wird, und gibt den aufgelösten Wert zurück. Wird das Promise abgelehnt, wird der Ablehnungsgrund als Ausnahme gemeldet.false: Wenn die Funktion ein Promise zurückgibt, gibt der Browser das Promise-Objekt zurück, ohne abzuwarten, bis es erfüllt oder abgelehnt wird.
functionDeclaration-
Ein String mit dem JavaScript-Quellcode der aufzurufenden Funktion. Der Browser wertet den String aus und ruft die resultierende Funktion mit den im Parameter
argumentsangegebenen Werten auf. resultOwnershipOptional-
Ein String, der angibt, ob der Browser eine Referenz auf das zurückgegebene Objekt behält, damit Sie später damit interagieren können. Er kann einen der folgenden Werte annehmen:
"none": Der Browser behält keine Referenz auf das zurückgegebene Objekt, sodass die Antwort kein Feldhandleenthält. Dies ist der Standardwert."root": Der Browser hält das zurückgegebene Objekt am Leben und fügt der Antwort ein Feldhandlehinzu. Sie können dashandlean andere Befehle des Modulsscriptübergeben und es mitscript.disownfreigeben, wenn Sie es nicht mehr benötigen. Der Browser gibt Handles auch frei, wenn der Realm zerstört wird.
serializationOptionsOptional-
Ein Objekt, das steuert, wie viele Details in der Antwort enthalten sind, wenn die Funktion ein Objekt zurückgibt. Es kann die folgenden Felder enthalten:
includeShadowTreeOptional-
Ein String, der angibt, ob Nachfahren von Shadow Roots in der Antwort enthalten sind, wenn der zurückgegebene Wert ein DOM-Knoten ist. Er kann einen der folgenden Werte annehmen:
"none": Nachfahren von Shadow Roots sind nicht enthalten. Dies ist der Standardwert."all": Nachfahren sowohl offener Shadow Roots (von JavaScript außerhalb der Root zugänglich) als auch geschlossener Shadow Roots (von JavaScript außerhalb der Root nicht zugänglich) sind enthalten."open": Nur Nachfahren offener Shadow Roots sind enthalten.
maxDomDepthOptional-
Eine nicht negative Ganzzahl oder
nullfür unbegrenzt, die angibt, wie viele Ebenen von Nachfahrenknoten in der Antwort enthalten sind. Der Standardwert ist0, wodurch Nachfahren ausgeschlossen werden. Diese Begrenzung gilt auch für Nachfahren von Shadow Roots, die durchincludeShadowTreeeingeschlossen werden. maxObjectDepthOptional-
Eine nicht negative Ganzzahl oder
nullfür unbegrenzt, die angibt, wie viele Ebenen verschachtelter Objekte in der Antwort enthalten sind. Der Standardwert istnull.
target-
Ein Objekt, das den Realm angibt, in dem die Funktion aufgerufen werden soll. Das Objekt muss entweder ein Feld
contextoder ein Feldrealmenthalten:context-
Ein String mit der ID des Kontexts, dessen aktives Dokument den Realm bereitstellt, in dem die Funktion aufgerufen werden soll. Kontext-IDs werden von Befehlen wie
browsingContext.getTreezurückgegeben. realm-
Ein String mit der ID des Realms, in dem die Funktion aufgerufen werden soll. Realm-IDs werden vom Befehl
script.getRealmszurückgegeben. sandboxOptional-
Ein String mit dem Namen des Sandbox-Realms, in dem die Funktion aufgerufen werden soll. Bei einem nicht leeren Namen erstellt der Browser im angegebenen Kontext einen Sandbox-Realm mit diesem Namen, falls noch keiner vorhanden ist. Bei einem leeren Namen (
"") wird die Funktion stattdessen im Realm des aktiven Dokuments aufgerufen. Dieses Feld ist nur verfügbar, wenn das Objekttargetein Feldcontextenthält.
thisOptional-
Ein Objekt, das den Wert beschreibt, der beim Aufruf der Funktion als
thisverwendet werden soll. Es verwendet dieselben Felder wie ein Objekt im Parameterarguments. Wird es weggelassen, verwendet der Browsernullfürthis. Bei einer Funktion ohne Strict Mode ersetzt JavaScriptnulldurch das globale Objekt des Realms. Bei einer Arrow Function wirkt sich dieses Feld nicht auf den Wert vonthisinnerhalb der Funktion aus. userActivationOptional-
Ein boolescher Wert, der angibt, ob der Browser eine Benutzerinteraktion simuliert, indem er vor dem Aufruf der Funktion eine transiente Aktivierung bereitstellt. Dadurch kann die Funktion APIs verwenden, die eine transiente Aktivierung erfordern, beispielsweise
Element.requestFullscreen().false: Der Browser simuliert keine Benutzerinteraktion und setzt eine vorhandene transiente Aktivierung nicht zurück. APIs, die eine transiente Aktivierung erfordern, können fehlschlagen, wenn für die Seite nicht bereits eine transiente Aktivierung vorliegt. Dies ist der Standardwert.true: Der Browser simuliert vor dem Aufruf der Funktion eine Benutzerinteraktion. Dies garantiert nicht, dass ein API-Aufruf erfolgreich ist; der Aufruf kann beispielsweise fehlschlagen, wenn eine erforderliche Berechtigung nicht erteilt wurde.
Rückgabewert
Je nach Wert des Felds type sind im Objekt result der Antwort die folgenden Felder verfügbar:
exceptionDetailsOptional-
Ein Objekt, das die ausgelöste Ausnahme beschreibt und nur vorhanden ist, wenn das Objekt
resultin der Antwort"type": "exception"enthält. Es enthält die folgenden Felder:columnNumber-
Eine nicht negative Ganzzahl mit der nullbasierten Spaltennummer, an der die Ausnahme ausgelöst wurde, oder
0, wenn der Stack-Trace leer ist. exception-
Ein Objekt, das den ausgelösten JavaScript-Wert in der Antwort darstellt. Der ausgelöste Wert kann ein
Error-Objekt oder ein anderer JavaScript-Wert sein. Es kann die folgenden Felder enthalten:handleOptional-
Ein String mit einer ID, über die in nachfolgenden Befehlen des Moduls
scriptauf das ausgelöste Objekt verwiesen werden kann. Dieses Handle kann nur in dem Realm verwendet werden, in dem es erstellt wurde. Der Browser fügt dieses Feld hinzu, wenn der ParameterresultOwnershipals"root"angegeben ist und der ausgelöste Wert ein Handle unterstützt. Dieses Feld wird weggelassen, wenn das Feldtypein diesemexception-Objekt"bigint","boolean","null","number","string"oder"undefined"ist. internalIdOptional-
Ein String, der ein Objekt innerhalb der Antwort eindeutig identifiziert. Dieses Feld ist nur vorhanden, wenn dasselbe Objekt in der Antwort mehrmals vorkommt. Diese ID kann nicht verwendet werden, um in nachfolgenden Befehlen auf das Objekt zu verweisen.
-
Ein String mit einer ID, über die in nachfolgenden Befehlen, die eine Knotenreferenz akzeptieren, auf den ausgelösten DOM-Knoten verwiesen werden kann, beispielsweise im Parameter
startNodesvonbrowsingContext.locateNodes. Dieses Feld ist nur vorhanden, wenn das Feldtypein diesemexception-Objekt"node"ist. Diese ID kann realmübergreifend verwendet werden, sofern die Realms auf denselben Knoten zugreifen können. type-
Ein String, der den Typ des ausgelösten Werts identifiziert, beispielsweise
"error","object"oder"string". valueOptional-
Je nach Feld
typeimexception-Objekt ein Array, ein boolescher Wert, eine Zahl, ein Objekt oder ein String, der den ausgelösten Wert darstellt. Dieses Feld wird weggelassen, wenn dieser Typ"error"ist. Einzelheiten zur Darstellung der einzelnen Typen finden Sie beim Feldvaluedes erfolgreichenresult. Für ausgelöste Werte verwendet der Browser die Standardwerte für die Felder des ParametersserializationOptions, unabhängig von den im Befehl angegebenen Werten.
lineNumber-
Eine nicht negative Ganzzahl mit der nullbasierten Zeilennummer, an der die Ausnahme ausgelöst wurde, oder
0, wenn der Stack-Trace leer ist. stackTrace-
Ein Objekt, das den JavaScript-Stack zu dem Zeitpunkt darstellt, an dem die Ausnahme ausgelöst wurde. Es enthält das folgende Feld:
callFrames-
Ein Array mit null oder mehr Stack-Frame-Objekten. Jedes Objekt enthält die folgenden Felder:
columnNumber-
Eine nicht negative Ganzzahl mit der nullbasierten Spaltennummer des ausgeführten Codes.
functionName-
Ein String mit dem Namen der ausgeführten Funktion.
lineNumber-
Eine nicht negative Ganzzahl mit der nullbasierten Zeilennummer des ausgeführten Codes.
url-
Ein String mit der URL des Skripts.
text-
Ein String mit einer textuellen Beschreibung der Ausnahme. Das genaue Format hängt vom Browser ab. Verlassen Sie sich daher bei Assertions in Tests nicht auf diesen Wert.
realm-
Ein String mit der ID des Realms, in dem die Funktion aufgerufen wird.
resultOptional-
Ein Objekt, das den Rückgabewert der Funktion darstellt und nur vorhanden ist, wenn das Objekt
resultin der Antwort"type": "success"enthält. Es kann die folgenden Felder enthalten:handleOptional-
Ein String mit einer ID, über die in nachfolgenden Befehlen des Moduls
scriptauf das zurückgegebene Objekt verwiesen werden kann. Dieses Handle kann nur in dem Realm verwendet werden, in dem es erstellt wurde. Der Browser fügt dieses Feld hinzu, wenn der ParameterresultOwnershipals"root"angegeben ist und der zurückgegebene Wert ein Handle unterstützt. Dieses Feld wird weggelassen, wenn das Feldtypein diesemresult-Objekt"bigint","boolean","null","number","string"oder"undefined"ist. internalIdOptional-
Ein String, der ein Objekt innerhalb der Antwort eindeutig identifiziert. Dieses Feld ist nur vorhanden, wenn dasselbe Objekt in der Antwort mehrmals vorkommt. Diese ID kann nicht verwendet werden, um in nachfolgenden Befehlen auf das Objekt zu verweisen. Dieses Feld wird weggelassen, wenn das Feld
typein diesemresult-Objekt"bigint","boolean","null","number","string"oder"undefined"ist. -
Ein String mit einer ID, über die in nachfolgenden Befehlen, die eine Knotenreferenz akzeptieren, auf den zurückgegebenen Knoten verwiesen werden kann, beispielsweise im Parameter
startNodesvonbrowsingContext.locateNodes. Dieses Feld ist nur vorhanden, wenn das Feldtypein diesemresult-Objekt"node"ist. Diese ID kann realmübergreifend verwendet werden, sofern die Realms auf denselben Knoten zugreifen können. type-
Ein String, der den Typ des von der Funktion zurückgegebenen Werts identifiziert, beispielsweise
"array","function","map","node","number","object","set"oder"string". valueOptional-
Je nach Feld
typein diesemresult-Objekt ein Array, ein boolescher Wert, eine Zahl, ein Objekt oder ein String, der den zurückgegebenen Wert darstellt.Beispielsweise werden
"bigint"-Werte als Strings,"boolean"-Werte alstrueoderfalseund"string"-Werte als Strings dargestellt. Bei"array","htmlcollection","nodelist"und"set"istvalueein Array von Objekten, die die Elemente der Sammlung darstellen. Bei"object"istvalueein Array von Schlüssel-Wert-Paaren.Dieses Feld ist nicht für jeden Typ vorhanden. Bei Objekten kann dieses Feld weggelassen werden, wenn die Grenze
maxObjectDeptherreicht ist oder dasselbe Objekt bereits in der Antwort dargestellt wurde.- Wenn
type"node"ist, istvalueein Objekt, das Eigenschaften des zurückgegebenen Knotens beschreibt und die folgenden Felder enthalten kann:attributesOptional-
Ein Objekt, dessen Schlüssel Attributnamen und dessen Werte die entsprechenden Attributwerte als Strings sind. Dieses Feld ist nur für Elementknoten vorhanden.
childNodeCount-
Eine nicht negative Ganzzahl, die die Anzahl der direkten Kindknoten des zurückgegebenen Knotens angibt. Dies ist die tatsächliche Anzahl, auch wenn das Feld
childrenfehlt. childrenOptional-
Ein Array von Kindknotenobjekten, jeweils mit Feldern wie
sharedId,typeundvalue. Nachfahren sind bis zu der Ebene enthalten, die durchmaxDomDepthim ParameterserializationOptionsangegeben ist. localNameOptional-
Ein String mit dem lokalen Namen des Knotens. Bei einem HTML-Element ist dies der Tag-Name in Kleinbuchstaben. Dieses Feld ist nur für Element- und Attributknoten vorhanden.
modeOptional-
Ein String, der angibt, ob die Shadow Root
"open"oder"closed"ist. Dieses Feld ist nur für Shadow-Root-Knoten vorhanden. namespaceURIOptional-
Ein String mit der Namespace-URI des Knotens. Dieses Feld ist nur für Element- und Attributknoten vorhanden. Bei HTML-Elementen ist der Wert immer der Standard-HTML-Namespace
"http://www.w3.org/1999/xhtml". nodeType-
Eine nicht negative Ganzzahl, die den Knotentyp darstellt, beispielsweise
1für ein Element oder3für einen Textknoten. nodeValueOptional-
Ein String mit dem Wert des Knotens, beispielsweise dem Text eines Textknotens oder den Daten eines Kommentarknotens. Dieses Feld fehlt bei Knoten, deren
nodeValuenullist, beispielsweise bei Element-, Dokument- und Shadow-Root-Knoten. shadowRootOptional-
Ein Objekt, das die mit dem Knoten verbundene Shadow Root beschreibt, mit Feldern wie
sharedId,typeundvalue. Dieses Feld istnull, wenn das zurückgegebene Element keine Shadow Root hat.
- Wenn
type"window"ist, istvalueein Objekt mit dem folgenden Feld:context-
Ein String mit der ID des mit dem Fenster verknüpften Kontexts.
- Wenn
type-
Ein String, der angibt, wie der Funktionsaufruf abgeschlossen wurde. Er hat einen der folgenden Werte:
"exception": Beim Auswerten vonfunctionDeclarationoder beim Aufruf der Funktion wurde eine Ausnahme ausgelöst, oder das von der Funktion zurückgegebene Promise wurde abgelehnt, währendawaitPromisetruewar. Das FeldexceptionDetailsbeschreibt die Ausnahme."success": Die Funktion wurde ohne Ausnahme abgeschlossen. Das Feldresultbeschreibt den Rückgabewert der Funktion.
Fehler
invalid argument-
Wird in einem der folgenden Fälle ausgelöst:
- Ein erforderlicher Parameter fehlt oder ein Parameter hat einen ungültigen Typ.
- Die Auswertung des Parameters
functionDeclarationergibt einen Wert, der keine Funktion ist. - Ein Objekt im Parameter
argumentsoderthis, einschließlich eines verschachtelten Objekts, hat einen unbekanntentypeoder einen für diesen Typ ungültigenvalue. Beispielsweise enthält ein Element seinesvalue-Arrays nicht genau zwei Elemente, wenntype"map"oder"object"ist.
no such frame-
Wird in einem der folgenden Fälle ausgelöst:
- Es wird kein Kontext mit der angegebenen Kontext-ID gefunden.
- Es wird kein Realm mit der angegebenen Realm-ID gefunden.
no such handle-
Wird ausgelöst, wenn ein
handle-Wert im Parameterargumentsoderthisim Ziel-Realm nicht gefunden wird. no such node-
Wird ausgelöst, wenn im Parameter
argumentsoderthiseinesharedIdangegeben ist und einer der folgenden Fälle vorliegt:- Es wird kein Knoten mit der angegebenen
sharedIdgefunden. - Der durch
targetangegebene Realm ist keinem Dokument zugeordnet. - Das Dokument des Knotens und der Ziel-Realm erfüllen die Same-Origin-Domain-Prüfung nicht.
- Es wird kein Knoten mit der angegebenen
Beschreibung
Der Befehl script.callFunction akzeptiert eine Funktionsdeklaration und Argumente, die an die Funktion übergeben werden.
Wenn Sie Argumente getrennt vom Quellcode der Funktion übergeben, können Sie Werte bereitstellen, darunter Referenzen auf vorhandene JavaScript-Objekte oder DOM-Knoten, ohne sie in den Quellcode-String einzufügen.
Mit dem Parameter serializationOptions können Sie begrenzen, wie viele Ebenen von DOM-Nachfahren und verschachtelten JavaScript-Objekten in der Antwort enthalten sind.
Wie diese Grenzen funktionieren, erfahren Sie unter Detaillierungsgrad der Rückgabe steuern auf der Seite zu script.evaluate.
Die Antwort kann außerdem die Kennungen handle, internalId und sharedId enthalten.
Worin sie sich unterscheiden und wo Sie sie verwenden können, erfahren Sie unter Objektkennungen in der Antwort auf der Seite zu script.evaluate.
Prüfen Sie beim Auswerten der Antwort das Feld type innerhalb von result, um zwischen einem erfolgreichen Funktionsaufruf und einer Ausnahme zu unterscheiden.
JavaScript-Ausnahmen werden im result des Befehls gemeldet, nicht als Protokollfehler.
Beispiele
>Eine Funktion mit einem Knoten und einem Text als Argumente aufrufen
Angenommen, Sie verfügen über eine WebDriver-BiDi-Verbindung und eine aktive Sitzung.
Angenommen, die Seite in einem Tab enthält die Überschrift „Welcome“ und Sie möchten deren Text in „Welcome back“ ändern.
Sie verwenden browsingContext.getTree, um die Kontext-ID des Tabs zu erhalten, und browsingContext.locateNodes, um die Überschrift zu finden und ihre sharedId zu erhalten.
Für die Änderung definieren Sie eine Funktion, die ein Element und einen String als Argumente akzeptiert.
Die Funktion weist den String der Eigenschaft textContent des Elements zu und gibt den aktualisierten Text zurück.
Senden Sie die folgende Nachricht, um die Funktion mit dem Überschriftenelement und „Welcome back“ als Argumenten aufzurufen:
{
"id": 1,
"method": "script.callFunction",
"params": {
"arguments": [
{
"sharedId": "a1b2c3d4-e5f6-4708-9a1b-2c3d4e5f6071"
},
{
"type": "string",
"value": "Welcome back"
}
],
"awaitPromise": false,
"functionDeclaration": "(element, text) => { element.textContent = text; return element.textContent; }",
"target": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f"
}
}
}
Der Browser antwortet wie folgt. Dabei hat das äußere result-Objekt der Antwort "type": "success" und enthält ein verschachteltes result-Objekt mit dem aktualisierten Text „Welcome back“:
{
"id": 1,
"type": "success",
"result": {
"realm": "7c37f4c0-abcd-1234-ef56-789012345678",
"result": {
"type": "string",
"value": "Welcome back"
},
"type": "success"
}
}
Eine Funktion mit einem Objekt als this aufrufen
Angenommen, Sie möchten den in der Eigenschaft count eines Objekts gespeicherten Wert erhöhen.
In einem vorherigen script.evaluate-Befehl haben Sie den Ausdruck ({ count: 2 }) ausgewertet und resultOwnership dabei auf "root" gesetzt.
Sie haben die Kontext-ID des Tabs aus dem vorherigen Beispiel verwendet, um den Ausdruck im Standard-Realm der Seite auszuwerten.
Der Browser hat das resultierende Objekt am Leben erhalten und sein Handle zurückgegeben.
Um count um drei zu erhöhen, definieren Sie eine Funktion, die einen Parameter increment akzeptiert, ihn zu this.count addiert und den aktualisierten Wert zurückgibt.
Verwenden Sie dieselbe Verbindung und Sitzung wie im vorherigen Beispiel und senden Sie die folgende Nachricht, um die Funktion aufzurufen, ohne nach dem vorherigen script.evaluate-Befehl zu einer anderen Seite zu navigieren oder die Seite neu zu laden.
Verwenden Sie in target die Kontext-ID aus dem vorherigen script.evaluate-Befehl.
Setzen Sie this auf eine Referenz mit dem Handle des Objekts und arguments auf ein Array mit einer Beschreibung der Zahl 3:
{
"id": 2,
"method": "script.callFunction",
"params": {
"arguments": [
{
"type": "number",
"value": 3
}
],
"awaitPromise": false,
"functionDeclaration": "function (increment) { this.count += increment; return this.count; }",
"target": {
"context": "93ee5bd6-d256-4608-a002-9a8995cc0e5f"
},
"this": {
"handle": "f1e2d3c4-b5a6-4978-8b9c-0d1e2f3a4b5c"
}
}
}
Der Browser antwortet wie folgt. Das verschachtelte result-Objekt enthält dabei den aktualisierten Wert 5:
{
"id": 2,
"type": "success",
"result": {
"realm": "7c37f4c0-abcd-1234-ef56-789012345678",
"result": {
"type": "number",
"value": 5
},
"type": "success"
}
}
Spezifikationen
| Spezifikation |
|---|
| WebDriver BiDi> # command-script-callFunction> |
Browser-Kompatibilität
Siehe auch
- Befehl
script.evaluate - Befehl
script.disown - Befehl
script.addPreloadScript - Befehl
browsingContext.locateNodes - Ereignis
script.message