次の方法で共有


SharedBufferReceivedEvent class

chrome.webview.sharedbufferreceived イベントのイベント オブジェクト。 このイベントは、 CoreWebView2.PostSharedBufferToScript が正常に呼び出されたときにディスパッチされます。

Extends

注釈

次の例では、1 回限りの読み取り専用の使用のためにデータをスクリプトに送信します。

まず、ネイティブ ホスト アプリ コードで、共有メモリにデータを設定します。

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

additionalDataAsJson パラメーターを解析して JSON 文字列としてCoreWebView2.PostSharedBufferToScriptした結果のオブジェクト。 このプロパティは、additionalDataAsJsonnullptrまたは空の文字列である場合にundefinedされます。

source

イベントのソースは、 chrome.webview オブジェクトです。

メソッド

getBuffer()

CoreWebView2.PostSharedBufferToScript に渡された共有バッファーからのバッキング コンテンツを含むArrayBuffer オブジェクトを返します。 バッファーが ReadOnly に設定された状態でCoreWebView2.PostSharedBufferToScriptが呼び出された場合、バッファーへの読み取りアクセスのみが許可されます。 読み取り専用バッファー内のコンテンツを変更しようとすると、WebView レンダラー プロセスでアクセス違反が発生し、レンダラー プロセスがクラッシュします。

プロパティの詳細

additionalData

additionalDataAsJson パラメーターを解析して JSON 文字列としてCoreWebView2.PostSharedBufferToScriptした結果のオブジェクト。 このプロパティは、additionalDataAsJsonnullptrまたは空の文字列である場合にundefinedされます。

additionalData: any;

プロパティ値

any

source

イベントのソースは、 chrome.webview オブジェクトです。

source: WebView;

プロパティ値

メソッドの詳細

getBuffer()

CoreWebView2.PostSharedBufferToScript に渡された共有バッファーからのバッキング コンテンツを含むArrayBuffer オブジェクトを返します。 バッファーが ReadOnly に設定された状態でCoreWebView2.PostSharedBufferToScriptが呼び出された場合、バッファーへの読み取りアクセスのみが許可されます。 読み取り専用バッファー内のコンテンツを変更しようとすると、WebView レンダラー プロセスでアクセス違反が発生し、レンダラー プロセスがクラッシュします。

getBuffer(): ArrayBuffer;

戻り値

ArrayBuffer

CoreWebView2.PostSharedBufferToScriptに渡される共有バッファーに対するArrayBuffer