SharedBufferReceivedEvent class

事件的 Event 对象 chrome.webview.sharedbufferreceived 。 成功调用 时 CoreWebView2.PostSharedBufferToScript 会调度此事件。

扩展

注解

示例

以下示例将数据发送到脚本,以便进行一次性的只读使用。

首先,在本机主机应用代码中,将数据设置为共享内存:

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

在 HTML 文档中,订阅并处理 sharedbufferreceived 事件。

接下来,在 HTML 文档中,订阅并处理 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);
}

属性

additionalData

一个 对象,它是将 参数CoreWebView2.PostSharedBufferToScript分析additionalDataAsJson为 JSON 字符串的结果。 如果 additionalDataAsJsonnullptr 或 空字符串,则此属性为 undefined

source

事件的源是 chrome.webview 对象。

方法

getBuffer()

返回一个 ArrayBuffer 对象,该对象将共享缓冲区中的支持内容传递给 CoreWebView2.PostSharedBufferToScript。 如果 CoreWebView2.PostSharedBufferToScript 调用 的缓冲区设置为 ReadOnly,则仅允许对缓冲区进行读取访问。 如果尝试修改只读缓冲区中的内容,将导致 WebView 呈现器进程中出现访问冲突,并导致呈现器进程崩溃。

属性详细信息

additionalData

一个 对象,它是将 参数CoreWebView2.PostSharedBufferToScript分析additionalDataAsJson为 JSON 字符串的结果。 如果 additionalDataAsJsonnullptr 或 空字符串,则此属性为 undefined

additionalData: any;

属性值

any

source

事件的源是 chrome.webview 对象。

source: WebView;

属性值

方法详细信息

getBuffer()

返回一个 ArrayBuffer 对象,该对象将共享缓冲区中的支持内容传递给 CoreWebView2.PostSharedBufferToScript。 如果 CoreWebView2.PostSharedBufferToScript 调用 的缓冲区设置为 ReadOnly,则仅允许对缓冲区进行读取访问。 如果尝试修改只读缓冲区中的内容,将导致 WebView 呈现器进程中出现访问冲突,并导致呈现器进程崩溃。

getBuffer(): ArrayBuffer;

返回

ArrayBuffer

传递到 ArrayBuffer 的共享缓冲区 CoreWebView2.PostSharedBufferToScript上的 。