Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hier erfahren Sie, wie Sie WinRT-Typen und -Member aus webseitigem JavaScript-Code in einer WebView2-App verwenden, wenn sie nativen WinRT-Code aus webseitigem Code aufrufen.
Sprachäquivalente
Das WebView2 WinRT JS-Projektionstool (wv2winrt) konvertiert wie folgt von WinRT in JavaScript-Sprachkonstrukte.
| WinRT-Sprachkonstrukt | JavaScript-Darstellung | Hinweise |
|---|---|---|
UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double |
Number |
|
Char, String |
String |
Eine JavaScript-instance String wird in eine WinRT-instance String konvertiert. |
Boolean |
Boolean |
|
Windows.Foundation.DateTime Struktur |
Date |
|
Windows.Foundation.TimeSpan Struktur |
Number |
|
Guid |
String |
Eine JavaScript-instance String , die eine Zeichenfolgendarstellung einer UUID (mit oder ohne Trennzeichen { und } geschweifte Klammern) enthält, wird in die entsprechende UUID konvertiert. Eine UUID wird in ihre Zeichenfolgendarstellung mit Trennzeichen { und } geschweiften Zeichen am Anfang und Ende konvertiert. Informationen zu UUID finden Sie unter RFC 4122. |
IVector<T>, IVectorView<T>, IObservableVector<T> |
Array und JavaScript-Objekt |
Wenn ein RuntimeClass instance Schnittstellen implementiertvector, wird es in JavaScript als das unten beschriebene übliche Objekt dargestellt, fungiert aber auch wie ein JavaScript-Array. Lese- und Schreibvorgänge werden live für das zugrunde liegende WinRT-Vektorobjekt ausgeführt. |
IMap<K,V>, IMapView<K,V>, IObservableMap<K,V> |
JavaScript-Objekt | Wenn ein RuntimeClass instance Schnittstellen implementiertmap, wird es in JavaScript als das unten beschriebene übliche Objekt dargestellt, verfügt aber auch über Eigenschaften mit Dem Namen und Werten aus dem zugrunde liegenden WinRT-Kartenobjekt. Lese- und Schreibvorgänge werden live für das zugrunde liegende WinRT-Kartenobjekt ausgeführt. |
Enum |
JavaScript-Objekt | Ein Enumerationstyp wird als JavaScript-Objekt dargestellt. Jeder Enumerationswert ist eine Number Eigenschaft für das JavaScript-Objekt. |
Struct |
JavaScript-Objekt | Ein Struct Typ wird in ein JavaScript-Objekt mit Eigenschaftennamen konvertiert, die den Struct Typmembernamen entsprechen. Dies ist eine bidirektionale Konvertierung. |
Namespace |
JavaScript-Objekt | Ein Namespace wird als JavaScript-Objekt dargestellt, das über eine -Eigenschaft für alle untergeordneten Namespaces, Enumerationstypen oder verfügt RuntimeClass. Der Namespace kann über 0, 1 oder viele untergeordnete Namespaces, Enumerationen oder Laufzeitklassen verfügen, und jeder einzelne untergeordnete Namespace, jede Enumeration und laufzeitklasse erhält eine eigene Eigenschaft. |
Class |
JavaScript-Objekt | Eine RuntimeClass Klasse wird in ein JavaScript-Objekt konvertiert, das über die gleichen Methoden, Eigenschaften und Ereignisse verfügt. |
Interface |
JavaScript-Objekt | Eine RuntimeClass Schnittstelle wird in ein JavaScript-Objekt konvertiert, das über die gleichen Methoden, Eigenschaften und Ereignisse verfügt. Es gibt keine Unterstützung für die Implementierung einer Schnittstelle in JavaScript. |
| Statischer Klassenmember | JavaScript-Objekteigenschaft | Siehe unten. |
| Klassenkonstruktor | JavaScript-Konstruktor und -Funktion | Siehe unten. |
Beim Übergeben von JavaScript-Objekten an Hostobjekte:
- Wenn JavaScript-Objekte
Datean Hostobjekte alsVT_DATEübergeben werden müssen, legen Sie die -Eigenschaft des HostobjektsshouldSerializeDatesauf festtrue. StandardmäßigDatewerden Objekte mithilfeJSON.stringifyvon alsstringan den Host übergeben. - Wenn von JavaScript typisierte Arrays an Hostobjekte als
arrayübergeben werden müssen, legen Sie die -Eigenschaft des HostobjektsshouldPassTypedArraysAsArraysauf festtrue. Typisierte Arrays werden standardmäßig alsIDispatchan den Host übergeben.
Siehe auch:
Statische Member der Klasse
Eine Laufzeitklasse mit statischen Eigenschaften, statischen Methoden oder statischen Ereignissen wird als Eigenschaft des Namespace dargestellt. Jede statische Eigenschaft, statische Methode und jedes statische Ereignis wird als Eigenschaft für dieses JavaScript-Objekt der Runtimeklasse dargestellt.
Beispiel: Für die statische WinRT-API-Methode Windows.Foundation.Uri.EscapeComponent:
-
Windows.Foundationist der Namespace. -
Uriist die Runtimeklasse. -
EscapeComponentist die statische Methode.
In JavaScript sieht die Darstellung ähnlich aus: : chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent
-
EscapeComponentist eine JavaScript-Methode, die eine Eigenschaft für das JavaScript-Objekt für dieUriRuntimeklasse ist. - Die
UriRuntimeklasse ist eine Eigenschaft des JavaScript-Objekts für denFoundationNamespace.
Um beispielsweise die statische Methode Windows.Foundation.Uri.EscapeComponentaufzurufen, rufen Sie Folgendes auf:
`chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent("example");`
Das JavaScript-Namespaceobjekt ist chrome.webview.hostObjects.Windows.Foundationhier .
Klassenkonstruktoren
Ein Konstruktor für eine RuntimeClass Klasse wird als einzelne Eigenschaft in einem JavaScript-Objekt dargestellt, das auf zwei Arten aufgerufen werden kann:
- Als Konstruktor für das JavaScript-Namespaceobjekt.
- Als Funktion für das JavaScript-Namespaceobjekt.
Um beispielsweise ein neues Windows.Foundation.Uri -Objekt zu erstellen, können Sie es entweder als Konstruktor mit newaufrufen:
`let uri = new chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
Oder rufen Sie sie als Funktion ohne newauf:
`let uri = chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
Das JavaScript-Namespaceobjekt ist chrome.webview.hostObjects.Windows.Foundationhier .
Methodenüberladungen
Wenn ein WinRT-Methodenname für mehr als eine Methode überladen ist, wird beim Aufrufen dieses Methodennamens aus JavaScript die Überladung aufgerufen, die über die übereinstimmende Anzahl von Parametern verfügt.
Wenn mehrere Überladungen mit einer übereinstimmenden Anzahl von Parametern vorhanden sind, wird die erste Überladung aufgerufen, die sich in den Metadaten befindet.
Method out-Parameter
Wenn eine WinRT-Methode Parameter aufweist out , ist das zurückgegebene Ergebnis beim Aufrufen dieser Methode aus JavaScript ein JavaScript-Objekt, das eine Eigenschaft für jeden out Parameter ist. Wenn die Methode über einen Nicht-Rückgabetypvoid verfügt, verfügt das zurückgegebene Ergebnisobjekt auch über eine Eigenschaft namens value , die den Rückgabewert der Methode enthält.
Beim Aufrufen einer WinRT-Methode mit out Parametern werden alle out Parameter in der Parameterliste im Methodenaufruf übersprungen (es sei denn, es handelt sich um einen Arraytyp). Angenommen, eine WinRT-Methode mit out Parametern und einem Nicht-Rückgabetypvoid ist mit MIDL3 wie folgt definiert:
String MethodWithOutParams(String stringParam1,
out Int32 intParam2,
out Int32 intParam3,
String stringParam4);
Wenn Sie diese Methode aus JavaScript aufrufen, lassen Sie die out Argumente aus:
let result = object.MethodWithOutParams("stringParam1",
"stringParam4");
Lesen Sie dann die -Eigenschaft für das JavaScript-Objektresult, um den value Rückgabewert der WinRT-Methode zu lesen. Um die Parameter der WinRT-Methode out zu lesen, lesen Sie die entsprechend benannten Eigenschaften für das JavaScript-Objekt result :
console.assert(result.value == "return value");
console.assert(result.intParam2 == 1);
console.assert(result.intParam3 == 2);
Bei Arraytypparametern out muss das Array beim Aufrufen der Methode in die Parameterliste der Methode übergeben werden. Bei einem Nicht-Rückgabetypvoid ersetzt das Ergebnisarray das Array, das für den Methodenaufruf übergeben wird. Für den void Rückgabetyp ist das Ergebnisarray das Ergebnis des Methodenaufrufs.
// Both methods update input array values to index values
String NonVoidMethodWithArrayOutParam(out Int[] intArrayParam);
Void VoidMethodWithArrayOutParam(out Int[] intArrayParam);
let input_array1 = [0, 0, 0];
let result1 = object.NonVoidMethodWithArrayOutParam(input_array1);
console.assert(input_array1 == [0, 1, 2])
let input_array2 = [0, 0, 0];
let result2 = object.VoidMethodWithArrayOutParam(input_array2);
console.assert(result2 == [0, 1, 2]);
Wenn typisierte Arrays als Arrayparameter out übergeben werden, chrome.webview.hostObjects.options.shouldPassTypedArraysAsArrays muss auf truefestgelegt werden.
Siehe auch:
- Problem 2788 zum WebView2 SDK und Windows App SDK (WinUI3) in C++ WinRT