Comment les types et les membres WinRT sont représentés dans JavaScript
Voici comment utiliser des types et des membres WinRT à partir du code JavaScript côté web dans une application WebView2, lors de l’appel du code WinRT côté natif à partir du code web.
Équivalents linguistiques
L’outil WebView2 WinRT JS Projection tool (wv2winrt) convertit de WinRT en constructions de langage JavaScript comme suit.
Construction du langage WinRT | Représentation JavaScript | Remarques |
---|---|---|
UInt8 , Int16 , UInt16 , Int32 , UInt32 , Int64 , UInt64 , Single , Double |
Number |
|
Char , String |
String |
Une instance JavaScript String est convertie en instance WinRT String . |
Boolean |
Boolean |
|
Windows.Foundation.DateTime Struct |
Date |
|
Windows.Foundation.TimeSpan Struct |
Number |
|
Guid |
String |
Une instance JavaScript String qui contient une représentation sous forme de chaîne d’un UUID (avec ou sans limitation { et } accolades) est convertie en l’UUID correspondant. Un UUID est converti en sa représentation sous forme de chaîne, avec des caractères de délimitation { et } d’accolade au début et à la fin. Pour plus d’informations sur UUID, consultez RFC 4122. |
IVector<T> , IVectorView<T> , IObservableVector<T> |
Array et objet JavaScript |
Si une RuntimeClass instance implémente des vector interfaces, elle est représentée dans JavaScript comme l’objet habituel décrit ci-dessous, mais elle agit également comme un tableau JavaScript. Les lectures et les écritures sont effectuées en direct sur l’objet vecteur WinRT sous-jacent. |
IMap<K,V> , IMapView<K,V> , IObservableMap<K,V> |
Objet JavaScript | Si une RuntimeClass instance implémente des map interfaces, elle est représentée dans JavaScript comme l’objet habituel décrit ci-dessous, mais possède également des propriétés avec le nom et les valeurs de l’objet map WinRT sous-jacent. Les lectures et écritures sont effectuées en direct sur l’objet map WinRT sous-jacent. |
Enum |
Objet JavaScript | Un type enum est représenté sous la forme d’un objet JavaScript. Chaque valeur enum est une Number propriété sur l’objet JavaScript. |
Struct |
Objet JavaScript | Un Struct type est converti en objet JavaScript qui a des noms de propriétés qui correspondent aux noms des membres de Struct type. Il s’agit d’une conversion bidirectionnelle. |
Namespace |
Objet JavaScript | Un espace de noms est représenté sous la forme d’un objet JavaScript qui a une propriété pour les espaces de noms enfants, les types enum ou RuntimeClass . L’espace de noms peut avoir 0, 1 ou plusieurs espaces de noms enfants, enums ou runtimeclasses, et chaque espace de noms enfant, enum et runtimeclass obtient sa propre propriété. |
Class |
Objet JavaScript | Une RuntimeClass classe est convertie en un objet JavaScript qui a les mêmes méthodes, propriétés et événements. |
Interface |
Objet JavaScript | Une RuntimeClass interface est convertie en un objet JavaScript qui a les mêmes méthodes, propriétés et événements. L’implémentation d’une interface dans JavaScript n’est pas prise en charge. |
Membre statique de classe | Propriété de l’objet JavaScript | Voir ci-dessous. |
Constructeur de classe | Constructeur et fonction JavaScript | Voir ci-dessous. |
Lors du passage d’objets JavaScript à des objets hôtes :
- Si les objets JavaScript
Date
doivent être passés aux objets hôtes en tant queVT_DATE
, définissez la propriété de l’objetshouldSerializeDates
hôte surtrue
. Par défaut,Date
les objets sont passés à l’hôte en tant questring
, à l’aide deJSON.stringify
. - Si les tableaux typés JavaScript doivent être passés aux objets hôtes en tant que
array
, définissez la propriété de l’objetshouldPassTypedArraysAsArrays
hôte surtrue
. Par défaut, les tableaux typés sont passés à l’hôte en tant queIDispatch
.
Voir aussi :
Membres statiques de classe
Une classe runtime qui a des propriétés statiques, des méthodes statiques ou des événements statiques est représentée en tant que propriété de l’espace de noms. Chaque propriété statique, méthode statique et événement statique est représenté sous la forme d’une propriété sur cet objet JavaScript de la classe runtime.
Par exemple, pour la méthode Windows.Foundation.Uri.EscapeComponent
statique de l’API WinRT :
-
Windows.Foundation
est l’espace de noms. -
Uri
est la classe runtime. -
EscapeComponent
est la méthode statique.
Dans JavaScript, la représentation est similaire : chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent
-
EscapeComponent
est une méthode JavaScript qui est une propriété sur l’objet JavaScript pour laUri
classe runtime. - Runtimeclass
Uri
est une propriété sur l’objet JavaScript de l’espace deFoundation
noms .
Par exemple, pour appeler la méthode Windows.Foundation.Uri.EscapeComponent
statique , appelez :
`chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent("example");`
L’objet d’espace de noms JavaScript ici est chrome.webview.hostObjects.Windows.Foundation
.
Constructeurs de classe
Un constructeur pour une RuntimeClass
classe est représenté sous la forme d’une propriété unique sur un objet JavaScript qui peut être appelé de deux façons :
- En tant que constructeur sur l’objet d’espace de noms JavaScript.
- En tant que fonction sur l’objet d’espace de noms JavaScript.
Par exemple, pour créer un Windows.Foundation.Uri
objet, vous pouvez l’appeler en tant que constructeur, à l’aide new
de :
`let uri = new chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
Ou, appelez-la en tant que fonction, sans new
:
`let uri = chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
L’objet d’espace de noms JavaScript ici est chrome.webview.hostObjects.Windows.Foundation
.
Surcharges de méthode
Si un nom de méthode WinRT est surchargé pour plusieurs méthodes, l’appel de ce nom de méthode à partir de JavaScript appelle la surcharge qui a le nombre de paramètres correspondant.
Si plusieurs surcharges ont un nombre de paramètres correspondant, la première surcharge trouvée dans les métadonnées est appelée.
Paramètres de sortie de méthode
Si une méthode WinRT a out
des paramètres, lors de l’appel de cette méthode à partir de JavaScript, le résultat retourné est un objet JavaScript qui est une propriété pour chaque out
paramètre. Si la méthode a un type non-retourvoid
, l’objet de résultat retourné aura également une propriété nommée value
qui contient la valeur de retour de la méthode.
Lors de l’appel d’une méthode WinRT qui a out
des paramètres, tous out
les paramètres sont ignorés dans la liste de paramètres de l’appel de méthode (sauf s’ils sont de type tableau). Par exemple, supposons qu’une méthode WinRT qui a out
des paramètres et un type non-retourvoid
soit définie comme suit, à l’aide de MIDL3 :
String MethodWithOutParams(String stringParam1,
out Int32 intParam2,
out Int32 intParam3,
String stringParam4);
Lorsque vous appelez cette méthode à partir de JavaScript, omettez les out
arguments :
let result = object.MethodWithOutParams("stringParam1",
"stringParam4");
Ensuite, pour lire la valeur de retour de la méthode WinRT, lisez la value
propriété sur l’objet JavaScript result
. Pour lire les paramètres de out
la méthode WinRT, lisez les propriétés nommées correspondantes sur l’objet JavaScript result
:
console.assert(result.value == "return value");
console.assert(result.intParam2 == 1);
console.assert(result.intParam3 == 2);
Pour les paramètres de type out
de tableau, le tableau doit être passé dans la liste de paramètres de la méthode lors de l’appel de la méthode. Pour un type non-retournévoid
, le tableau de résultats remplace le tableau qui est passé pour l’appel de méthode. Pour le void
type de retour, le tableau de résultats est le résultat de l’appel de méthode.
// 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]);
Si vous passez des tableaux typés en tant que paramètres de tableau out
, chrome.webview.hostObjects.options.shouldPassTypedArraysAsArrays
doit être défini sur true
.
Voir aussi :
- Problème n° 2788 concernant le Kit de développement logiciel (SDK) WebView2 et le SDK d’application Windows (WinUI3) dans C++ WinRT