Compartilhar via


WebView class

window.chrome.webview é a classe para aceder às APIs específicas do WebView2 que estão disponíveis para o script em execução no WebView2 Runtime.

Extends

Propriedades

hostObjects

Contém proxies assíncronos para todos os objetos de anfitrião adicionados através CoreWebView2.AddHostObjectToScript , bem como opções para configurar esses proxies e o contentor para proxies síncronos.

Se chamar coreWebView2.AddHostObjectToScript("myObject", object); o seu código nativo, um proxy assíncrono para object está disponível para o seu código do lado da Web, utilizando chrome.webview.hostObjects.myObject.

Métodos

addEventListener(type, listener, options)

O método padrão EventTarget.addEventListener . Utilize-o para subscrever o message evento ou sharedbufferreceived evento. O message evento recebe mensagens publicadas a partir do anfitrião WebView2 via CoreWebView2.PostWebMessageAsJson ou CoreWebView2.PostWebMessageAsString. O sharedbufferreceived evento recebe memórias intermédias partilhadas publicadas a partir do anfitrião WebView2 através de CoreWebView2.PostSharedBufferToScript. Consulte CoreWebView2.PostWebMessageAsJson( Win32/C++, .NET, WinRT).

postMessage(message)

Quando a página chama postMessage, o message parâmetro é convertido em JSON e é publicado de forma assíncrona no processo de anfitrião WebView2. Isto resultará na criação do CoreWebView2.WebMessageReceived evento ou do CoreWebView2Frame.WebMessageReceived evento, consoante postMessage seja chamado a partir do documento de nível superior no WebView2 ou a partir de um fotograma subordinado. Consulte CoreWebView2.WebMessageReceived( Win32/C++, .NET, WinRT). Consulte CoreWebView2Frame.WebMessageReceived( Win32/C++, .NET, WinRT).

postMessageWithAdditionalObjects(message, additionalObjects)

Quando a página chama postMessageWithAdditionalObjects, o message parâmetro é enviado para WebView2 da mesma forma que "postMessage". Os objetos transmitidos como "additionalObjects" são convertidos nos respetivos tipos nativos e estarão disponíveis na CoreWebView2WebMessageReceivedEventArgs.AdditionalObjects propriedade .

releaseBuffer(buffer)

Chame com o ArrayBuffer do chrome.webview.sharedbufferreceived evento para libertar o recurso de memória partilhada subjacente.

removeEventListener(type, listener, options)

O método padrão EventTarget.removeEventListener . Utilize-o para anular a subscrição do message evento ou sharedbufferreceived .

Detalhes da propriedade

hostObjects

Contém proxies assíncronos para todos os objetos de anfitrião adicionados através CoreWebView2.AddHostObjectToScript , bem como opções para configurar esses proxies e o contentor para proxies síncronos.

Se chamar coreWebView2.AddHostObjectToScript("myObject", object); o seu código nativo, um proxy assíncrono para object está disponível para o seu código do lado da Web, utilizando chrome.webview.hostObjects.myObject.

hostObjects: HostObjectsAsyncRoot;

Valor da propriedade

Exemplos

Por exemplo, suponha que tem um objeto COM com a seguinte interface:

[uuid(3a14c9c0-bc3e-453f-a314-4ce4a0ec81d8), object, local]
interface IHostObjectSample : IUnknown
{
    // Demonstrate basic method call with some parameters and a return value.
    HRESULT MethodWithParametersAndReturnValue([in] BSTR stringParameter, [in] INT integerParameter, [out, retval] BSTR* stringResult);

    // Demonstrate getting and setting a property.
    [propget] HRESULT Property([out, retval] BSTR* stringResult);
    [propput] HRESULT Property([in] BSTR stringValue);

    [propget] HRESULT IndexedProperty(INT index, [out, retval] BSTR * stringResult);
    [propput] HRESULT IndexedProperty(INT index, [in] BSTR stringValue);

    // Demonstrate native calling back into JavaScript.
    HRESULT CallCallbackAsynchronously([in] IDispatch* callbackParameter);

    // Demonstrate a property which uses Date types
    [propget] HRESULT DateProperty([out, retval] DATE * dateResult);
    [propput] HRESULT DateProperty([in] DATE dateValue);

    // Creates a date object on the native side and sets the DateProperty to it.
    HRESULT CreateNativeDate();
};

Adicione uma instância desta interface ao javaScript com AddHostObjectToScript. Neste caso, dê-lhe o samplenome .

No código da aplicação anfitriã nativa:

VARIANT remoteObjectAsVariant = {};
m_hostObject.query_to<IDispatch>(&remoteObjectAsVariant.pdispVal);
remoteObjectAsVariant.vt = VT_DISPATCH;

// We can call AddHostObjectToScript multiple times in a row without // calling RemoveHostObject first. This will replace the previous object // with the new object. In our case, this is the same object, and everything // is fine.
CHECK_FAILURE(
    m_webView->AddHostObjectToScript(L"sample", &remoteObjectAsVariant));
remoteObjectAsVariant.pdispVal->Release();

No documento HTML, utilize o objeto COM com chrome.webview.hostObjects.sample.

document.getElementById("getPropertyAsyncButton").addEventListener("click", async () => {
    const propertyValue = await chrome.webview.hostObjects.sample.property;
    document.getElementById("getPropertyAsyncOutput").textContent = propertyValue;
});

document.getElementById("getPropertySyncButton").addEventListener("click", () => {
    const propertyValue = chrome.webview.hostObjects.sync.sample.property;
    document.getElementById("getPropertySyncOutput").textContent = propertyValue;
});

document.getElementById("setPropertyAsyncButton").addEventListener("click", async () => {
    const propertyValue = document.getElementById("setPropertyAsyncInput").value;
    // The following line will work but it will return immediately before the property value has actually been set.
    // If you need to set the property and wait for the property to change value, use the setHostProperty function.
    chrome.webview.hostObjects.sample.property = propertyValue;
    document.getElementById("setPropertyAsyncOutput").textContent = "Set";
});

document.getElementById("setPropertyExplicitAsyncButton").addEventListener("click", async () => {
    const propertyValue = document.getElementById("setPropertyExplicitAsyncInput").value;
    // If you care about waiting until the property has actually changed value, use the setHostProperty function.
    await chrome.webview.hostObjects.sample.setHostProperty("property", propertyValue);
    document.getElementById("setPropertyExplicitAsyncOutput").textContent = "Set";
});

document.getElementById("setPropertySyncButton").addEventListener("click", () => {
    const propertyValue = document.getElementById("setPropertySyncInput").value;
    chrome.webview.hostObjects.sync.sample.property = propertyValue;
    document.getElementById("setPropertySyncOutput").textContent = "Set";
});

document.getElementById("getIndexedPropertyAsyncButton").addEventListener("click", async () => {
    const index = parseInt(document.getElementById("getIndexedPropertyAsyncParam").value);
    const resultValue = await chrome.webview.hostObjects.sample.IndexedProperty[index];
    document.getElementById("getIndexedPropertyAsyncOutput").textContent = resultValue;
});
document.getElementById("setIndexedPropertyAsyncButton").addEventListener("click", async () => {
    const index = parseInt(document.getElementById("setIndexedPropertyAsyncParam1").value);
    const value = document.getElementById("setIndexedPropertyAsyncParam2").value;;
    chrome.webview.hostObjects.sample.IndexedProperty[index] = value;
    document.getElementById("setIndexedPropertyAsyncOutput").textContent = "Set";
});
document.getElementById("invokeMethodAsyncButton").addEventListener("click", async () => {
    const paramValue1 = document.getElementById("invokeMethodAsyncParam1").value;
    const paramValue2 = parseInt(document.getElementById("invokeMethodAsyncParam2").value);
    const resultValue = await chrome.webview.hostObjects.sample.MethodWithParametersAndReturnValue(paramValue1, paramValue2);
    document.getElementById("invokeMethodAsyncOutput").textContent = resultValue;
});

document.getElementById("invokeMethodSyncButton").addEventListener("click", () => {
    const paramValue1 = document.getElementById("invokeMethodSyncParam1").value;
    const paramValue2 = parseInt(document.getElementById("invokeMethodSyncParam2").value);
    const resultValue = chrome.webview.hostObjects.sync.sample.MethodWithParametersAndReturnValue(paramValue1, paramValue2);
    document.getElementById("invokeMethodSyncOutput").textContent = resultValue;
});

let callbackCount = 0;
document.getElementById("invokeCallbackButton").addEventListener("click", async () => {
    chrome.webview.hostObjects.sample.CallCallbackAsynchronously(() => {
        document.getElementById("invokeCallbackOutput").textContent = "Native object called the callback " + (++callbackCount) + " time(s).";
    });
});

// Date property
document.getElementById("setDateButton").addEventListener("click", () => {
    chrome.webview.hostObjects.options.shouldSerializeDates = true;
    chrome.webview.hostObjects.sync.sample.dateProperty = new Date();
    document.getElementById("dateOutput").textContent = "sample.dateProperty: " + chrome.webview.hostObjects.sync.sample.dateProperty;
});
document.getElementById("createRemoteDateButton").addEventListener("click", () => {
    chrome.webview.hostObjects.sync.sample.createNativeDate();
    document.getElementById("dateOutput").textContent = "sample.dateProperty: " + chrome.webview.hostObjects.sync.sample.dateProperty;
});

Detalhes do método

addEventListener(type, listener, options)

O método padrão EventTarget.addEventListener . Utilize-o para subscrever o message evento ou sharedbufferreceived evento. O message evento recebe mensagens publicadas a partir do anfitrião WebView2 via CoreWebView2.PostWebMessageAsJson ou CoreWebView2.PostWebMessageAsString. O sharedbufferreceived evento recebe memórias intermédias partilhadas publicadas a partir do anfitrião WebView2 através de CoreWebView2.PostSharedBufferToScript. Consulte CoreWebView2.PostWebMessageAsJson( Win32/C++, .NET, WinRT).

addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;

Parâmetros

type

string

O nome do evento a subscrever. Os valores válidos são message, e sharedbufferreceived.

listener

EventListenerOrEventListenerObject

A chamada de retorno a invocar quando o evento é gerado.

options

boolean | AddEventListenerOptions

Opções para controlar a forma como o evento é processado.

Retornos

void

postMessage(message)

Quando a página chama postMessage, o message parâmetro é convertido em JSON e é publicado de forma assíncrona no processo de anfitrião WebView2. Isto resultará na criação do CoreWebView2.WebMessageReceived evento ou do CoreWebView2Frame.WebMessageReceived evento, consoante postMessage seja chamado a partir do documento de nível superior no WebView2 ou a partir de um fotograma subordinado. Consulte CoreWebView2.WebMessageReceived( Win32/C++, .NET, WinRT). Consulte CoreWebView2Frame.WebMessageReceived( Win32/C++, .NET, WinRT).

postMessage(message: any) : void;

Parâmetros

message

any

A mensagem a enviar para o anfitrião WebView2. Pode ser qualquer objeto que possa ser serializado para JSON.

Retornos

void

Comentários

Exemplos

Publique uma mensagem no CoreWebView2:

const inTopLevelFrame = (window === window.parent);
if (inTopLevelFrame) {
    // The message can be any JSON serializable object.
    window.chrome.webview.postMessage({
        myMessage: 'Hello from the script!',
        otherValue: 1}
    );
    // A simple string is an example of a JSON serializable object.
    window.chrome.webview.postMessage("example");
}

postMessageWithAdditionalObjects(message, additionalObjects)

Quando a página chama postMessageWithAdditionalObjects, o message parâmetro é enviado para WebView2 da mesma forma que "postMessage". Os objetos transmitidos como "additionalObjects" são convertidos nos respetivos tipos nativos e estarão disponíveis na CoreWebView2WebMessageReceivedEventArgs.AdditionalObjects propriedade .

postMessageWithAdditionalObjects(message: any, additionalObjects: ArrayLike<any>) : void;

Parâmetros

message

any

A mensagem a enviar para o anfitrião WebView2. Pode ser qualquer objeto que possa ser serializado para JSON.

additionalObjects

ArrayLike<any>

Uma sequência de objetos DOM que têm representações nativas no WebView2. Este parâmetro tem de ser ArrayLike. Os seguintes tipos de DOM são mapeados para nativos:

DOM Win32 .NET WinRT
Arquivo ICoreWebView2File System.IO.FileInfo Windows.Storage.StorageFile

null ou undefined as entradas serão transmitidas como null tipo no WebView2. Caso contrário, se um objeto inválido ou não suportado for transmitido através desta API, será emitida uma exceção e a mensagem não será publicada.

Retornos

void

Comentários

Exemplos

Publique uma mensagem que inclua objetos de Ficheiro de um elemento de entrada no CoreWebView2:

const input = document.getElementById('files');
input.addEventListener('change', function() {
    // Note that postMessageWithAdditionalObjects does not accept a single object,
    // but only accepts an ArrayLike object.
    // However, input.files is type FileList, which is already an ArrayLike object so
    // no conversion to array is needed.
    const currentFiles = input.files;
    chrome.webview.postMessageWithAdditionalObjects("FilesDropped",
        currentFiles);
});

releaseBuffer(buffer)

Chame com o ArrayBuffer do chrome.webview.sharedbufferreceived evento para libertar o recurso de memória partilhada subjacente.

releaseBuffer(buffer: ArrayBuffer): void;

Parâmetros

buffer

ArrayBuffer

Um ArrayBuffer do chrome.webview.sharedbufferreceived evento.

Retornos

void

removeEventListener(type, listener, options)

O método padrão EventTarget.removeEventListener . Utilize-o para anular a subscrição do message evento ou sharedbufferreceived .

removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;

Parâmetros

type

string

O nome do evento para anular a subscrição. Os valores válidos são message e sharedbufferreceived.

listener

EventListenerOrEventListenerObject

A chamada de retorno a remover do evento.

options

boolean | EventListenerOptions

Opções para controlar a forma como o evento é processado.

Retornos

void