Irakurri ingelesez

Partekatu honen bidez:


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 como VT_DATE, establezca la propiedad truedel shouldSerializeDates objeto host en . De forma predeterminada, Date los objetos se pasan al host como string, mediante JSON.stringify.
  • Si las matrices con tipo JavaScript deben pasarse a objetos host como array, establezca la propiedad truedel shouldPassTypedArraysAsArrays objeto host en . De forma predeterminada, las matrices con tipo se pasan al host como IDispatch.

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.EscapeComponentestá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 runtimeclass Uri .
  • Runtimeclass Uri es una propiedad del objeto JavaScript para el espacio de Foundation nombres.

Por ejemplo, para llamar al método Windows.Foundation.Uri.EscapeComponentestático , llame a:

JavaScript
`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:

JavaScript
`let uri = new chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`

O bien, llámalo como una función, sin new:

JavaScript
`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:

C++
String MethodWithOutParams(String stringParam1, 
                           out Int32 intParam2, 
                           out Int32 intParam3, 
                           String stringParam4);

Al llamar a ese método desde JavaScript, omita los out argumentos:

JavaScript
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 :

JavaScript
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.

C++
// Both methods update input array values to index values
String NonVoidMethodWithArrayOutParam(out Int[] intArrayParam);

Void VoidMethodWithArrayOutParam(out Int[] intArrayParam);
JavaScript
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:

Consulte también