Partager via


WebView class

window.chrome.webview est la classe permettant d’accéder aux API spécifiques à WebView2 disponibles pour le script en cours d’exécution dans WebView2 Runtime.

Extends

Propriétés

hostObjects

Contient des proxys asynchrones pour tous les objets hôtes ajoutés via CoreWebView2.AddHostObjectToScript , ainsi que des options pour configurer ces proxys et le conteneur pour les proxys synchrones.

Si vous appelez coreWebView2.AddHostObjectToScript("myObject", object); dans votre code natif, un proxy asynchrone pour object est disponible pour votre code côté web, à l’aide chrome.webview.hostObjects.myObjectde .

Méthodes

addEventListener(type, listener, options)

Méthode standard EventTarget.addEventListener . Utilisez-la pour vous abonner à l’événement ou sharedbufferreceived à l’événementmessage. L’événement message reçoit les messages publiés à partir de l’hôte WebView2 via CoreWebView2.PostWebMessageAsJson ou CoreWebView2.PostWebMessageAsString. L’événement sharedbufferreceived reçoit des mémoires tampons partagées publiées à partir de l’hôte WebView2 via CoreWebView2.PostSharedBufferToScript. Consultez CoreWebView2.PostWebMessageAsJson( Win32/C++, .NET, WinRT).

postMessage(message)

Lorsque la page appelle postMessage, le message paramètre est converti en JSON et publié de façon asynchrone dans le processus hôte WebView2. Cela entraîne la levée de l’événement CoreWebView2.WebMessageReceived ou de l’événement CoreWebView2Frame.WebMessageReceived , selon que postMessage est appelé à partir du document de niveau supérieur dans webView2 ou à partir d’un frame enfant. Consultez CoreWebView2.WebMessageReceived( Win32/C++, .NET, WinRT). Consultez CoreWebView2Frame.WebMessageReceived( Win32/C++, .NET, WinRT).

postMessageWithAdditionalObjects(message, additionalObjects)

Lorsque la page appelle postMessageWithAdditionalObjects, le message paramètre est envoyé à WebView2 de la même façon que « postMessage ». Les objets passés en tant que « additionalObjects » sont convertis en leurs types natifs et seront disponibles dans la CoreWebView2WebMessageReceivedEventArgs.AdditionalObjects propriété .

releaseBuffer(buffer)

Appelez avec le ArrayBuffer à partir de l’événement chrome.webview.sharedbufferreceived pour libérer la ressource de mémoire partagée sous-jacente.

removeEventListener(type, listener, options)

Méthode standard EventTarget.removeEventListener . Utilisez-le pour vous désabonner de l’événement message ou sharedbufferreceived .

Détails de la propriété

hostObjects

Contient des proxys asynchrones pour tous les objets hôtes ajoutés via CoreWebView2.AddHostObjectToScript , ainsi que des options pour configurer ces proxys et le conteneur pour les proxys synchrones.

Si vous appelez coreWebView2.AddHostObjectToScript("myObject", object); dans votre code natif, un proxy asynchrone pour object est disponible pour votre code côté web, à l’aide chrome.webview.hostObjects.myObjectde .

hostObjects: HostObjectsAsyncRoot;

Valeur de propriété

Exemples

Par exemple, supposons que vous ayez un objet COM avec l’interface suivante :

[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();
};

Ajoutez un instance de cette interface dans votre JavaScript avec AddHostObjectToScript. Dans ce cas, nommez-le sample.

Dans le code de l’application hôte native :

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();

Dans le document HTML, utilisez l’objet COM à l’aide de 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;
});

Détails de la méthode

addEventListener(type, listener, options)

Méthode standard EventTarget.addEventListener . Utilisez-la pour vous abonner à l’événement ou sharedbufferreceived à l’événementmessage. L’événement message reçoit les messages publiés à partir de l’hôte WebView2 via CoreWebView2.PostWebMessageAsJson ou CoreWebView2.PostWebMessageAsString. L’événement sharedbufferreceived reçoit des mémoires tampons partagées publiées à partir de l’hôte WebView2 via CoreWebView2.PostSharedBufferToScript. Consultez CoreWebView2.PostWebMessageAsJson( Win32/C++, .NET, WinRT).

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

Paramètres

type

string

Nom de l’événement auquel s’abonner. Les valeurs valides sont message, et sharedbufferreceived.

listener

EventListenerOrEventListenerObject

Rappel à appeler lorsque l’événement est déclenché.

options

boolean | AddEventListenerOptions

Options permettant de contrôler la façon dont l’événement est géré.

Retours

void

postMessage(message)

Lorsque la page appelle postMessage, le message paramètre est converti en JSON et publié de façon asynchrone dans le processus hôte WebView2. Cela entraîne la levée de l’événement CoreWebView2.WebMessageReceived ou de l’événement CoreWebView2Frame.WebMessageReceived , selon que postMessage est appelé à partir du document de niveau supérieur dans webView2 ou à partir d’un frame enfant. Consultez CoreWebView2.WebMessageReceived( Win32/C++, .NET, WinRT). Consultez CoreWebView2Frame.WebMessageReceived( Win32/C++, .NET, WinRT).

postMessage(message: any) : void;

Paramètres

message

any

Message à envoyer à l’hôte WebView2. Il peut s’agir de n’importe quel objet qui peut être sérialisé au format JSON.

Retours

void

Remarques

Exemples

Publiez un message sur :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)

Lorsque la page appelle postMessageWithAdditionalObjects, le message paramètre est envoyé à WebView2 de la même façon que « postMessage ». Les objets passés en tant que « additionalObjects » sont convertis en leurs types natifs et seront disponibles dans la CoreWebView2WebMessageReceivedEventArgs.AdditionalObjects propriété .

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

Paramètres

message

any

Message à envoyer à l’hôte WebView2. Il peut s’agir de n’importe quel objet qui peut être sérialisé au format JSON.

additionalObjects

ArrayLike<any>

Séquence d’objets DOM qui ont des représentations natives dans WebView2. Ce paramètre doit être ArrayLike. Les types DOM suivants sont mappés au mode natif :

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

null ou undefined les entrées seront passées en tant que null type dans WebView2. Sinon, si un objet non valide ou non pris en charge est passé via cette API, une exception est levée et le message ne parvient pas à être affiché.

Retours

void

Remarques

Exemples

Publiez un message qui inclut des objets File d’un élément d’entrée dans 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)

Appelez avec le ArrayBuffer à partir de l’événement chrome.webview.sharedbufferreceived pour libérer la ressource de mémoire partagée sous-jacente.

releaseBuffer(buffer: ArrayBuffer): void;

Paramètres

buffer

ArrayBuffer

de ArrayBuffer l’événement chrome.webview.sharedbufferreceived .

Retours

void

removeEventListener(type, listener, options)

Méthode standard EventTarget.removeEventListener . Utilisez-le pour vous désabonner de l’événement message ou sharedbufferreceived .

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

Paramètres

type

string

Nom de l’événement dont vous souhaitez vous désabonner. Les valeurs valides sont message et sharedbufferreceived.

listener

EventListenerOrEventListenerObject

Rappel à supprimer de l’événement.

options

boolean | EventListenerOptions

Options permettant de contrôler la façon dont l’événement est géré.

Retours

void