Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Veja como usar tipos e membros do WinRT de dentro do código JavaScript do lado da Web em um aplicativo WebView2, ao chamar o código WinRT do lado nativo do código do lado da Web.
Equivalentes de idioma
A ferramenta de projeção WebView2 WinRT JS (wv2winrt) converte de construções de linguagem WinRT para JavaScript da seguinte maneira.
| Construção da linguagem WinRT | Representação JavaScript | Observações |
|---|---|---|
UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double |
Number |
|
Char, String |
String |
Uma instância JavaScript String é convertida em uma instância WinRT String . |
Boolean |
Boolean |
|
Windows.Foundation.DateTime struct |
Date |
|
Windows.Foundation.TimeSpan struct |
Number |
|
Guid |
String |
Uma instância JavaScript String que contém uma representação de cadeia de caracteres de um UUID (com ou sem delimitação { e } chaves) é convertida no UUID correspondente. Um UUID é convertido em sua representação de cadeia de caracteres, com caracteres de delimitação { e } chaves no início e no final. Para obter informações sobre UUID, consulte RFC 4122. |
IVector<T>, IVectorView<T>, IObservableVector<T> |
Array e objeto JavaScript |
Se uma RuntimeClass instância implementar vector interfaces, ela será representada no JavaScript como o objeto usual descrito abaixo, mas também agirá como uma matriz JavaScript. As leituras e gravações são executadas ao vivo no objeto vetorial WinRT subjacente. |
IMap<K,V>, IMapView<K,V>, IObservableMap<K,V> |
Objeto JavaScript | Se uma RuntimeClass instância implementar map interfaces, ela será representada no JavaScript como o objeto usual descrito abaixo, mas também terá propriedades com nome e valores do objeto de mapa WinRT subjacente. Leituras e gravações são executadas ao vivo 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 em um objeto JavaScript que tem nomes de propriedade que correspondem aos nomes de membro do Struct tipo. Esta é uma conversão bidirecional. |
Namespace |
Objeto JavaScript | Um namespace é representado como um objeto JavaScript que tem uma propriedade para qualquer namespace filho, tipos de enumeração ou RuntimeClass. O namespace pode ter 0, 1 ou muitos namespaces, enumerações ou runtimeclasses filho, e cada namespace, enum e runtimeclass filho individual obtém sua própria propriedade. |
Class |
Objeto JavaScript | Uma RuntimeClass classe é convertida em um objeto JavaScript que tem os mesmos métodos, propriedades e eventos. |
Interface |
Objeto JavaScript | Uma RuntimeClass interface é convertida em um objeto JavaScript que tem os mesmos métodos, propriedades e eventos. Não há suporte para implementar uma interface em JavaScript. |
| Membro estático de classe | Propriedade do objeto JavaScript | Confira a seguir. |
| Construtor de classe | Construtor e função JavaScript | Confira a seguir. |
Ao passar objetos JavaScript para objetos host:
- Se os objetos JavaScript
Dateprecisarem ser passadosshouldSerializeDatespara objetos host comoVT_DATE, defina a propriedade do objeto host comotrue. Por padrão,Dateos objetos são passados para o host comostring, usandoJSON.stringify. - Se as matrizes tipadas em JavaScript precisarem ser passadas
shouldPassTypedArraysAsArrayspara objetos hospedeiros comoarray, defina a propriedade do objeto host comotrue. Por padrão, as matrizes tipadas são passadas para o host comoIDispatch.
Veja também:
Membros estáticos da classe
Uma classe de runtime que tem propriedades estáticas, métodos estáticos ou eventos estáticos é representada como uma propriedade do namespace. Cada propriedade estática, método estático e evento estático é representado como uma propriedade nesse objeto JavaScript da classe runtime.
Por exemplo, para o método Windows.Foundation.Uri.EscapeComponentestático da API do WinRT:
-
Windows.Foundationé o namespace. -
Urié a runtimeclass. -
EscapeComponenté o método estático.
Em JavaScript, a representação é semelhante: chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent:
-
EscapeComponenté um método JavaScript que é uma propriedade no objeto JavaScript para aUriclasse runtime. - A
Uriclasse runtimeClass é uma propriedade no objeto JavaScript para oFoundationnamespace.
Por exemplo, para chamar o método Windows.Foundation.Uri.EscapeComponentestático , chame:
`chrome.webview.hostObjects.Windows.Foundation.Uri.EscapeComponent("example");`
O objeto de namespace JavaScript aqui é chrome.webview.hostObjects.Windows.Foundation.
Construtores de classe
Um construtor para uma RuntimeClass classe é representado como uma única propriedade em um objeto JavaScript que pode ser chamado de duas maneiras:
- Como um construtor no objeto de namespace JavaScript.
- Como uma função no objeto de namespace JavaScript.
Por exemplo, para criar um novo Windows.Foundation.Uri objeto, você pode chamá-lo de construtor, usando new:
`let uri = new chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
Ou chame-a como uma função, sem new:
`let uri = chrome.webview.hostObjects.Windows.Foundation.Uri("https://example.com/");`
O objeto de namespace JavaScript aqui é chrome.webview.hostObjects.Windows.Foundation.
Sobrecargas de método
Se um nome de método WinRT estiver sobrecarregado para mais de um método, chamar esse nome de método do JavaScript chamará a sobrecarga que tem o número correspondente de parâmetros.
Se houver mais de 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 do JavaScript, o resultado retornado será um objeto JavaScript que possui uma propriedade para cada out parâmetro. Se o método tiver um tipo devoid não retorno, o objeto de resultado retornado também terá uma propriedade chamada value que contém o valor retornado do método.
Ao chamar um método WinRT que tenha out parâmetros, todos os out parâmetros são ignorados na lista de parâmetros na chamada do método (a menos que sejam do tipo matriz). Por exemplo, suponha que um método WinRT que tenha out parâmetros e um tipo devoid não retorno seja definido da seguinte maneira, usando MIDL3:
String MethodWithOutParams(String stringParam1,
out Int32 intParam2,
out Int32 intParam3,
String stringParam4);
Ao chamar esse método do JavaScript, omita os out argumentos:
let result = object.MethodWithOutParams("stringParam1",
"stringParam4");
Em seguida, para ler o valor de retorno do método WinRT, leia a value propriedade no objeto JavaScript result . Para ler os out parâmetros do método WinRT, leia as propriedades nomeadas correspondentes no objeto JavaScript result :
console.assert(result.value == "return value");
console.assert(result.intParam2 == 1);
console.assert(result.intParam3 == 2);
Para parâmetros do tipo out matriz, a matriz precisa ser passada para a lista de parâmetros do método ao chamar o método. Para um tipo semvoid retorno, a matriz de resultados substituirá a matriz passada 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 passar matrizes tipadas como parâmetros de matriz out , chrome.webview.hostObjects.options.shouldPassTypedArraysAsArrays precisa ser definido como true.
Veja também:
- Problema #2788 sobre o SDK do WebView2 e o SDK do Windows App (WinUI3) no WinRT C++