Compartilhar via


Como os tipos e membros WinRT são representados no JavaScript

Eis como utilizar tipos e membros WinRT a partir do código JavaScript do lado da Web numa aplicação WebView2 ao chamar código WinRT do lado nativo a partir de código do lado da Web.

Equivalentes de idioma

A ferramenta de Projeção WinRT JS (wv2winrt) webView2 converte de winRT para construções de linguagem JavaScript da seguinte forma.

Construção de linguagem WinRT Representação de JavaScript Observações
UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double Number
Char, String String Uma instância de JavaScript String é convertida numa instância WinRT String .
Boolean Boolean
Windows.Foundation.DateTime estrutura Date
Windows.Foundation.TimeSpan estrutura Number
Guid String Uma instância de JavaScript String que contém uma representação de cadeia de carateres de um UUID (com ou sem delimitamento { e } chavetas) é convertida para o UUID correspondente. Um UUID é convertido na respetiva representação de cadeia, com carateres delimitadores { e } chavetas no início e no fim. Para obter informações sobre o UUID, consulte RFC 4122.
IVector<T>, IVectorView<T>, IObservableVector<T> Array objeto e JavaScript Se uma RuntimeClass instância implementar interfaces vector , será representada em JavaScript como o objeto habitual descrito abaixo, mas também funcionará como uma matriz JavaScript. As leituras e as escritas são executadas em direto no objeto de vetor WinRT subjacente.
IMap<K,V>, IMapView<K,V>, IObservableMap<K,V> Objeto JavaScript Se uma RuntimeClass instância implementar interfaces map , é representada em JavaScript como o objeto habitual descrito abaixo, mas também tem propriedades com o nome e valores do objeto de mapa WinRT subjacente. As leituras e as escritas são executadas em direto no objeto de mapa WinRT subjacente.
Enum Objeto JavaScript Um tipo de enumeração é representado como um objeto JavaScript. Cada valor de enumeração é uma Number propriedade no objeto JavaScript.
Struct Objeto JavaScript Um Struct tipo é convertido num objeto JavaScript que tem nomes de propriedade que correspondem aos nomes dos membros do Struct tipo. Esta é uma conversão bidirecional.
Namespace Objeto JavaScript Um espaço de nomes é representado como um objeto JavaScript que tem uma propriedade para espaços de nomes subordinados, tipos de enumeração ou RuntimeClass. O espaço de nomes pode ter 0, 1 ou muitos espaços de nomes subordinados, enumerações ou runtimeclasses e cada espaço de nomes subordinado individual, enumeração e runtimeclass obtém a sua própria propriedade.
Class Objeto JavaScript Uma RuntimeClass classe é convertida num objeto JavaScript que tem os mesmos métodos, propriedades e eventos.
Interface Objeto JavaScript Uma RuntimeClass interface é convertida num objeto JavaScript que tem os mesmos métodos, propriedades e eventos. Não existe suporte para implementar uma interface no JavaScript.
Membro estático da classe Propriedade do objeto JavaScript Confira a seguir.
Construtor de classes Construtor e função JavaScript Confira a seguir.

Ao transmitir objetos JavaScript para objetos anfitriões:

  • Se os objetos JavaScript Date precisarem de ser transmitidos para objetos anfitriões como VT_DATE, defina a propriedade do objeto anfitrião shouldSerializeDates como true. Por predefinição, Date os objetos são transmitidos para o anfitrião como string, utilizando JSON.stringify.
  • Se as matrizes escritas em JavaScript precisarem de ser transmitidas para objetos anfitriões como array, defina a propriedade do objeto anfitrião shouldPassTypedArraysAsArrays como true. Por predefinição, as matrizes digitadas são transmitidas para o anfitrião como IDispatch.

Veja também:

Membros estáticos da classe

Uma classe de runtime com propriedades estáticas, métodos estáticos ou eventos estáticos é representada como uma propriedade do espaço de nomes. Cada propriedade estática, método estático e evento estático é representado como uma propriedade nesse objeto JavaScript da runtimeclass.

Por exemplo, para o método Windows.Foundation.Uri.EscapeComponentestático da API WinRT:

  • Windows.Foundation é o espaço de nomes.
  • Uri é a runtimeclass.
  • EscapeComponent é o método estático.

Em JavaScript, a representação tem um aspeto semelhante: : chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent

  • EscapeComponent é um método JavaScript que é uma propriedade no objeto JavaScript da Uri runtimeclass.
  • Runtimeclass Uri é uma propriedade no objeto JavaScript do Foundation espaço de nomes.

Por exemplo, para chamar o método Windows.Foundation.Uri.EscapeComponentestático , chame:

`chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent("example");`

O objeto de espaço de nomes JavaScript aqui é chrome.webview.hostObjects.Windows.Foundation.

Construtores de classes

Um construtor de uma RuntimeClass classe é representado como uma única propriedade num objeto JavaScript que pode ser chamado de duas formas:

  • Como construtor no objeto de espaço de nomes JavaScript.
  • Como uma função no objeto de espaço de nomes JavaScript.

Por exemplo, para criar um novo Windows.Foundation.Uri objeto, pode chamá-lo de construtor com new:

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

Em alternativa, chame-a como uma função, sem new:

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

O objeto de espaço de nomes JavaScript aqui é chrome.webview.hostObjects.Windows.Foundation.

Sobrecargas do método

Se um nome do método WinRT estiver sobrecarregado para mais do que um método, chamar esse nome de método de JavaScript chamará a sobrecarga que tem o número correspondente de parâmetros.

Se existir mais do que uma sobrecarga que tenha um número correspondente de parâmetros, a primeira sobrecarga encontrada nos metadados será chamada.

Parâmetros de saída do método

Se um método WinRT tiver out parâmetros, ao chamar esse método de JavaScript, o resultado devolvido será um objeto JavaScript que uma propriedade para cada out parâmetro. Se o método tiver umvoid tipo de não retorno, o objeto de resultado devolvido também terá uma propriedade com o nome value que contém o valor devolvido do método.

Ao chamar um método WinRT com out parâmetros, todos os out parâmetros são ignorados na lista de parâmetros na chamada de método (a menos que sejam do tipo de matriz). Por exemplo, suponha que um método WinRT com out parâmetros e um tipo de nãovoid retorno é definido da seguinte forma, com MIDL3:

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

Quando chamar esse método de JavaScript, omita os out argumentos:

let result = object.MethodWithOutParams("stringParam1", 
                                        "stringParam4");

Em seguida, para ler o valor devolvido do método WinRT, leia a value propriedade no objeto JavaScript result . Para ler os parâmetros do out método WinRT, leia as propriedades correspondentemente nomeadas no objeto JavaScript result :

console.assert(result.value == "return value");

console.assert(result.intParam2 == 1);

console.assert(result.intParam3 == 2);

Para parâmetros de tipo out de matriz, a matriz tem de ser transmitida para a lista de parâmetros do método ao chamar o método. Para um tipo que nãovoid seja devolvido, a matriz de resultados substituirá a matriz transmitida para a chamada de método. Para o void tipo de retorno, a matriz de resultados será o resultado da chamada do 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]);

Se transmitir matrizes digitadas como parâmetros de matriz out , chrome.webview.hostObjects.options.shouldPassTypedArraysAsArrays tem de ser definido como true.

Veja também:

  • Problema n.º 2788 sobre o SDK WebView2 e o SDK da Aplicação windows (WinUI3) em C++ WinRT

Confira também