Cómo se representan los tipos y miembros de WinRT en JavaScript
Aquí se muestra cómo usar los tipos y miembros de WinRT desde el código JavaScript del lado web en una aplicación WebView2, al llamar al código WinRT de lado nativo desde el código del lado web.
Equivalentes de idioma
La herramienta de proyección js de WinRT de WebView2 (wv2winrt) convierte de WinRT a construcciones de lenguaje JavaScript como se indica a continuación.
Construcción del lenguaje WinRT | Representación de JavaScript | Notas |
---|---|---|
UInt8 , Int16 , UInt16 , Int32 , UInt32 , Int64 , UInt64 , Single , Double |
Number |
|
Char , String |
String |
Una instancia de JavaScript String se convierte en una instancia de WinRT String . |
Boolean |
Boolean |
|
Windows.Foundation.DateTime Estructura |
Date |
|
Windows.Foundation.TimeSpan Estructura |
Number |
|
Guid |
String |
Una instancia de JavaScript String que contiene una representación de cadena de un UUID (con o sin delimitación { y } llaves) se convierte en el UUID correspondiente. Un UUID se convierte en su representación de cadena, con caracteres delimitadores { y } llaves al principio y al final. Para obtener información sobre UUID, consulte RFC 4122. |
IVector<T> , IVectorView<T> , IObservableVector<T> |
Array y el objeto JavaScript |
Si una RuntimeClass instancia implementa interfaces vector , se representa en JavaScript como el objeto habitual que se describe a continuación, pero también actuará como una matriz de JavaScript. Las lecturas y escrituras se realizan en directo en el objeto vector de WinRT subyacente. |
IMap<K,V> , IMapView<K,V> , IObservableMap<K,V> |
JavaScript (objeto) | Si una RuntimeClass instancia implementa interfaces map , se representa en JavaScript como el objeto habitual descrito a continuación, pero también tiene propiedades con el nombre y los valores del objeto de mapa de WinRT subyacente. Las lecturas y escrituras se realizan en directo en el objeto de mapa de WinRT subyacente. |
Enum |
JavaScript (objeto) | Un tipo de enumeración se representa como un objeto JavaScript. Cada valor de enumeración es una Number propiedad del objeto JavaScript. |
Struct |
JavaScript (objeto) | Un Struct tipo se convierte en un objeto JavaScript que tiene nombres de propiedad que corresponden a los nombres de miembro de Struct tipo. Se trata de una conversión bidireccional. |
Namespace |
JavaScript (objeto) | Un espacio de nombres se representa como un objeto JavaScript que tiene una propiedad para cualquier espacio de nombres secundario, tipos de enumeración o RuntimeClass . El espacio de nombres puede tener 0, 1 o muchos espacios de nombres secundarios, enumeraciones o runtimeclasses, y cada espacio de nombres secundario individual, enumeración y runtimeclass obtiene su propia propiedad. |
Class |
JavaScript (objeto) | Una RuntimeClass clase se convierte en un objeto JavaScript que tiene los mismos métodos, propiedades y eventos. |
Interface |
JavaScript (objeto) | Una RuntimeClass interfaz se convierte en un objeto JavaScript que tiene los mismos métodos, propiedades y eventos. No se admite la implementación de una interfaz en JavaScript. |
Miembro estático de clase | Propiedad del objeto JavaScript | Véalo a continuación. |
Constructor de clase | Constructor y función de JavaScript | Véalo a continuación. |
Al pasar objetos de JavaScript a objetos host:
- Si los objetos de JavaScript
Date
deben pasarse a objetos host comoVT_DATE
, establezca la propiedadtrue
delshouldSerializeDates
objeto host en . De forma predeterminada,Date
los objetos se pasan al host comostring
, medianteJSON.stringify
. - Si las matrices con tipo JavaScript deben pasarse a objetos host como
array
, establezca la propiedadtrue
delshouldPassTypedArraysAsArrays
objeto host en . De forma predeterminada, las matrices con tipo se pasan al host comoIDispatch
.
Vea también:
Miembros estáticos de clase
Una clase en tiempo de ejecución que tiene propiedades estáticas, métodos estáticos o eventos estáticos se representa como una propiedad del espacio de nombres. Cada propiedad estática, método estático y evento estático se representa como una propiedad en ese objeto JavaScript de runtimeclass.
Por ejemplo, para el método Windows.Foundation.Uri.EscapeComponent
estático de la API de WinRT:
-
Windows.Foundation
es el espacio de nombres. -
Uri
es runtimeclass. -
EscapeComponent
es el método estático.
En JavaScript, la representación tiene un aspecto similar: : chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent
-
EscapeComponent
es un método de JavaScript que es una propiedad en el objeto JavaScript para runtimeclassUri
. - Runtimeclass
Uri
es una propiedad del objeto JavaScript para el espacio deFoundation
nombres.
Por ejemplo, para llamar al método Windows.Foundation.Uri.EscapeComponent
estático , llame a:
`chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent("example");`
El objeto de espacio de nombres de JavaScript aquí es chrome.webview.hostObjects.Windows.Foundation
.
Constructores de clases
Un constructor para una RuntimeClass
clase se representa como una sola propiedad en un objeto JavaScript al que se puede llamar de dos maneras:
- Como constructor en el objeto de espacio de nombres de JavaScript.
- Como una función en el objeto de espacio de nombres de JavaScript.
Por ejemplo, para crear un nuevo Windows.Foundation.Uri
objeto, puede llamarlo como constructor mediante new
:
`let uri = new chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
O bien, llámalo como una función, sin new
:
`let uri = chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
El objeto de espacio de nombres de JavaScript aquí es chrome.webview.hostObjects.Windows.Foundation
.
Sobrecargas de método
Si un nombre de método winRT está sobrecargado para más de un método, llamar a ese nombre de método desde JavaScript llamará a la sobrecarga que tiene el número coincidente de parámetros.
Si hay más de una sobrecarga que tiene un número coincidente de parámetros, se llamará a la primera sobrecarga que se encuentra en los metadatos.
Parámetros de salida del método
Si un método WinRT tiene out
parámetros, al llamar a ese método desde JavaScript, el resultado devuelto será un objeto JavaScript que una propiedad para cada out
parámetro. Si el método tiene un tipo que novoid
es devuelto, el objeto de resultado devuelto también tendrá una propiedad denominada value
que contiene el valor devuelto del método.
Al llamar a un método WinRT que tiene out
parámetros, los out
parámetros se omiten en la lista de parámetros de la llamada al método (a menos que sean de tipo matriz). Por ejemplo, supongamos que un método WinRT que tiene out
parámetros y un tipo que novoid
es devuelto se define de la siguiente manera, mediante MIDL3:
String MethodWithOutParams(String stringParam1,
out Int32 intParam2,
out Int32 intParam3,
String stringParam4);
Al llamar a ese método desde JavaScript, omita los out
argumentos:
let result = object.MethodWithOutParams("stringParam1",
"stringParam4");
A continuación, para leer el valor devuelto del método WinRT, lea la value
propiedad en el objeto JavaScript result
. Para leer los parámetros del out
método WinRT, lea las propiedades con nombre correspondientes en el objeto JavaScript result
:
console.assert(result.value == "return value");
console.assert(result.intParam2 == 1);
console.assert(result.intParam3 == 2);
Para los parámetros de tipo out
de matriz, la matriz debe pasarse a la lista de parámetros del método al llamar al método . Para un tipo que novoid
es devuelto, la matriz de resultados reemplazará la matriz que se pasa para la llamada al método. Para el void
tipo de valor devuelto, la matriz de resultados será el resultado de la llamada al método.
// 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 se pasan matrices con tipo como parámetros de matriz out
, chrome.webview.hostObjects.options.shouldPassTypedArraysAsArrays
debe establecerse en true
.
Vea también:
- Problema n.º 2788 sobre el SDK de WebView2 y Windows App SDK (WinUI3) en WinRT de C++