Auf Englisch lesen

Teilen über


Darstellung von WinRT-Typen und -Membern in JavaScript

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-Instanz String wird in eine WinRT-Instanz String konvertiert.
Boolean Boolean
Windows.Foundation.DateTime Struktur Date
Windows.Foundation.TimeSpan Struktur Number
Guid String Eine JavaScript-Instanz 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 eine RuntimeClass Instanz Schnittstellen implementiert vector , wird sie in JavaScript wie das unten beschriebene übliche Objekt dargestellt, verhält sich 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 eine RuntimeClass Instanz Schnittstellen implementiert, wird sie in JavaScript wie das unten beschriebene übliche Objekt dargestellt, verfügt aber auch über Eigenschaften mit Dem Namen und Werten aus dem zugrunde liegenden WinRT-Zuordnungsobjekt map . 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 Date an Hostobjekte als VT_DATEübergeben werden müssen, legen Sie die -Eigenschaft des Hostobjekts shouldSerializeDates auf fest true. Standardmäßig Date werden Objekte mithilfe JSON.stringifyvon als stringan den Host übergeben.
  • Wenn von JavaScript typisierte Arrays an Hostobjekte als arrayübergeben werden müssen, legen Sie die -Eigenschaft des Hostobjekts shouldPassTypedArraysAsArrays auf fest true. Typisierte Arrays werden standardmäßig als IDispatchan 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.Foundation ist der Namespace.
  • Uri ist die Runtimeklasse.
  • EscapeComponent ist die statische Methode.

In JavaScript sieht die Darstellung ähnlich aus: : chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent

  • EscapeComponent ist eine JavaScript-Methode, die eine Eigenschaft für das JavaScript-Objekt für die Uri Runtimeklasse ist.
  • Die Uri Runtimeklasse ist eine Eigenschaft des JavaScript-Objekts für den Foundation Namespace.

Um beispielsweise die statische Methode Windows.Foundation.Uri.EscapeComponentaufzurufen, rufen Sie Folgendes auf:

JavaScript
`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:

JavaScript
`let uri = new chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`

Oder rufen Sie sie als Funktion ohne newauf:

JavaScript
`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:

C++
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:

JavaScript
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 :

JavaScript
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.

C++
// Both methods update input array values to index values
String NonVoidMethodWithArrayOutParam(out Int[] intArrayParam);

Void VoidMethodWithArrayOutParam(out Int[] intArrayParam);
JavaScript
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:

  • Issue #2788 about WebView2 SDK and Windows App SDK (WinUI3) in C++ WinRT (Issue #2788 about WebView2 SDK and Windows App SDK (WinUI3) in C++ WinRT

Siehe auch