Partage via


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 que VT_DATE, définissez la propriété de l’objet shouldSerializeDates hôte sur true. Par défaut, Date les objets sont passés à l’hôte en tant que string, à l’aide de JSON.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’objet shouldPassTypedArraysAsArrays hôte sur true. Par défaut, les tableaux typés sont passés à l’hôte en tant que IDispatch.

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.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 la Uri classe runtime.
  • Runtimeclass Uri est une propriété sur l’objet JavaScript de l’espace de Foundation noms .

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 le SDK d’application Windows (WinUI3) dans C++ WinRT

Voir aussi