Partager via


SharedBufferReceivedEvent class

Objet d’événement pour l’événement chrome.webview.sharedbufferreceived . Cet événement est distribué quand CoreWebView2.PostSharedBufferToScript est appelé avec succès.

Extends

Remarques

Exemples

L’exemple suivant envoie des données à un script pour une consommation unique en lecture seule.

Tout d’abord, dans le code de l’application hôte native, définissez les données dans la mémoire partagée :

wil::com_ptr<ICoreWebView2ExperimentalEnvironment10> environment;
CHECK_FAILURE(
    m_appWindow->GetWebViewEnvironment()->QueryInterface(IID_PPV_ARGS(&environment)));

wil::com_ptr<ICoreWebView2ExperimentalSharedBuffer> sharedBuffer;
CHECK_FAILURE(environment->CreateSharedBuffer(bufferSize, &sharedBuffer));
// Add data to shared memory via IStream.
wil::com_ptr<IStream> stream;
CHECK_FAILURE(sharedBuffer->OpenStream(&stream));
CHECK_FAILURE(stream->Write(data, sizeof(data), nullptr));
PCWSTR additionalDataAsJson = L"{\"myBufferType\":\"bufferType1\"}";
if (fromFrame)
{
    m_webviewFrame4->PostSharedBufferToScript(
        sharedBuffer.get(), COREWEBVIEW2_SHARED_BUFFER_ACCESS_READ_ONLY,
        additionalDataAsJson);
}
else
{
    m_webView18->PostSharedBufferToScript(
        sharedBuffer.get(), COREWEBVIEW2_SHARED_BUFFER_ACCESS_READ_ONLY,
        additionalDataAsJson);
}
// Close the one-time shared buffer, to release resources.
sharedBuffer->Close();

Dans le document HTML, abonnez-vous à l’événement sharedbufferreceived et gérez-le.

Ensuite, dans le document HTML, abonnez-vous à, puis gérez l’événement sharedbufferreceived :

window.chrome.webview.addEventListener("sharedbufferreceived", e => {
    SharedBufferReceived(e);});
let readOnlySharedBuffer;
function ShowReadOnlySharedBuffer() {
    if (readOnlySharedBuffer) {
        DisplaySharedBufferData(readOnlySharedBuffer);
    } else {
        // Post a web message to ask host to share the one time read only buffer.
        chrome.webview.postMessage("RequestOneTimeShareBuffer");
    }
}

function DisplaySharedBufferData(buffer) {
    document.getElementById("shared-buffer-data").value =
        new TextDecoder().decode(new Uint8Array(buffer));
}

function SharedBufferReceived(e) {
    if (e.additionalData && e.additionalData.myBufferType == "bufferType1") {
        readOnlySharedBuffer = e.getBuffer();
    } else {
        sharedBuffer = e.getBuffer();
    }
    DisplaySharedBufferData(e.getBuffer());
}

function ReleaseBuffer(buffer) {
    window.chrome.webview.releaseBuffer(buffer);
}

Propriétés

additionalData

Objet qui est le résultat de l’analyse du paramètre sur additionalDataAsJsonCoreWebView2.PostSharedBufferToScript en tant que chaîne JSON. Cette propriété sera undefined si additionalDataAsJson est nullptr ou la chaîne vide.

source

La source de l’événement est l’objet chrome.webview .

Méthodes

getBuffer()

Retourne un ArrayBuffer objet avec le contenu de stockage de la mémoire tampon partagée passé à CoreWebView2.PostSharedBufferToScript. Si CoreWebView2.PostSharedBufferToScript a été appelé avec la mémoire tampon définie sur ReadOnly, seul l’accès en lecture est autorisé à la mémoire tampon. Si vous essayez de modifier le contenu d’une mémoire tampon en lecture seule, cela provoque une violation d’accès dans le processus du renderer WebView et bloque le processus du renderer.

Détails de la propriété

additionalData

Objet qui est le résultat de l’analyse du paramètre sur additionalDataAsJsonCoreWebView2.PostSharedBufferToScript en tant que chaîne JSON. Cette propriété sera undefined si additionalDataAsJson est nullptr ou la chaîne vide.

additionalData: any;

Valeur de propriété

any

source

La source de l’événement est l’objet chrome.webview .

source: WebView;

Valeur de propriété

Détails de la méthode

getBuffer()

Retourne un ArrayBuffer objet avec le contenu de stockage de la mémoire tampon partagée passé à CoreWebView2.PostSharedBufferToScript. Si CoreWebView2.PostSharedBufferToScript a été appelé avec la mémoire tampon définie sur ReadOnly, seul l’accès en lecture est autorisé à la mémoire tampon. Si vous essayez de modifier le contenu d’une mémoire tampon en lecture seule, cela provoque une violation d’accès dans le processus du renderer WebView et bloque le processus du renderer.

getBuffer(): ArrayBuffer;

Retours

ArrayBuffer

sur ArrayBuffer la mémoire tampon partagée passée à CoreWebView2.PostSharedBufferToScript.