Schulung
Lernpfad
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge aus, um die neuesten Funktionen, Sicherheitsupdates und technischen Support zu nutzen.
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.
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:
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.stringify
von als string
an den Host übergeben.array
übergeben werden müssen, legen Sie die -Eigenschaft des Hostobjekts shouldPassTypedArraysAsArrays
auf fest true
. Typisierte Arrays werden standardmäßig als IDispatch
an den Host übergeben.Siehe auch:
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.Uri
Runtimeklasse ist eine Eigenschaft des JavaScript-Objekts für den Foundation
Namespace.Um beispielsweise die statische Methode Windows.Foundation.Uri.EscapeComponent
aufzurufen, rufen Sie Folgendes auf:
`chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent("example");`
Das JavaScript-Namespaceobjekt ist chrome.webview.hostObjects.Windows.Foundation
hier .
Ein Konstruktor für eine RuntimeClass
Klasse wird als einzelne Eigenschaft in einem JavaScript-Objekt dargestellt, das auf zwei Arten aufgerufen werden kann:
Um beispielsweise ein neues Windows.Foundation.Uri
-Objekt zu erstellen, können Sie es entweder als Konstruktor mit new
aufrufen:
`let uri = new chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
Oder rufen Sie sie als Funktion ohne new
auf:
`let uri = chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
Das JavaScript-Namespaceobjekt ist chrome.webview.hostObjects.Windows.Foundation
hier .
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.
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 true
festgelegt werden.
Siehe auch:
Schulung
Lernpfad
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization