Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 | Notes |
|---|---|---|
UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double |
Number |
|
Char, String |
String |
Un instance JavaScript String est converti en instance WinRT String . |
Boolean |
Boolean |
|
Windows.Foundation.DateTime Struct |
Date |
|
Windows.Foundation.TimeSpan Struct |
Number |
|
Guid |
String |
Un instance JavaScript String qui contient une représentation sous forme de chaîne d’un UUID (avec ou sans limitation { et } accolades) est converti 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 un RuntimeClass instance implémente des map interfaces, il est représenté dans JavaScript comme l’objet habituel décrit ci-dessous, mais a également des propriétés avec le nom et les valeurs de l’objet de mappage 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
Datedoivent être passés aux objets hôtes en tant queVT_DATE, définissez la propriété de l’objetshouldSerializeDateshôte surtrue. Par défaut,Dateles 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’objetshouldPassTypedArraysAsArrayshô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.EscapeComponentstatique de l’API WinRT :
-
Windows.Foundationest l’espace de noms. -
Uriest la classe runtime. -
EscapeComponentest la méthode statique.
Dans JavaScript, la représentation est similaire : chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent
-
EscapeComponentest une méthode JavaScript qui est une propriété sur l’objet JavaScript pour laUriclasse runtime. - Runtimeclass
Uriest une propriété sur l’objet JavaScript de l’espace deFoundationnoms .
Par exemple, pour appeler la méthode Windows.Foundation.Uri.EscapeComponentstatique , 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 newde :
`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 Windows App SDK (WinUI3) dans C++ WinRT