WorkletSharedStorage

实验性: 这是一个 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

WorkletSharedStorageShared Storage API 的一个接口,它表示 worklet 上下文中特定来源的共享存储。

可以通过 SharedStorageWorkletGlobalScope.sharedStorage 访问 WorkletSharedStorage

实例属性

context 实验性 非标准

包含通过 FencedFrameConfig.setSharedStorageContext() 方法从关联的浏览上下文传递到共享存储 worklet 的上下文数据。

实例方法

WorkletSharedStorage 继承自其父接口 SharedStorage 的属性。

get() 实验性

从共享存储中检索值。

length() 实验性

返回当前存储在当前来源的共享存储中的条目数。

remainingBudget() 实验性

返回当前来源的剩余导航预算。

由于在其上定义了 异步迭代器,因此 WorkletSharedStorage 还包括以下方法

entries() 实验性

返回 WorkletSharedStorage 对象实例的可枚举属性的键值对的新异步迭代器。

keys() 实验性

返回一个新的异步迭代器,其中包含 WorkletSharedStorage 对象实例中每个项目的键。

WorkletSharedStorage[Symbol.asyncIterator]() 实验性

默认返回 entries() 函数。

示例

通过 setSharedStorageContext() 传递上下文数据

您可以使用 私有聚合 API 创建报告,这些报告将围栏框架内的事件级数据与嵌入文档中的上下文数据相结合。setSharedStorageContext() 可用于将上下文数据从嵌入器传递到由 受保护受众 API 启动的共享存储 worklet。

在此示例中,我们使用 共享存储 存储来自嵌入页面和围栏框架的数据。

在嵌入页面上,我们使用 setSharedStorageContext() 将模拟事件 ID 作为共享存储上下文设置。

js
const frameConfig = await navigator.runAdAuction({ resolveToConfig: true });

// Data from the embedder that you want to pass to the shared storage worklet
frameConfig.setSharedStorageContext("some-event-id");

const frame = document.createElement("fencedframe");
frame.config = frameConfig;

在围栏框架中,在使用 window.sharedStorage.worklet.addModule() 添加 worklet 模块后,我们使用 window.sharedStorage.run() 将事件级数据发送到共享存储 worklet 模块(这与来自嵌入文档的上下文数据无关)。

js
const frameData = {
  // Data available only inside the fenced frame
};

await window.sharedStorage.worklet.addModule("reporting-worklet.js");

await window.sharedStorage.run("send-report", {
  data: {
    frameData,
  },
});

reporting-worklet.js worklet 中,我们从 sharedStorage.context 读取嵌入文档的事件 ID,从数据对象读取框架的事件级数据。然后,我们通过私有聚合报告它们。

js
class ReportingOperation {
  convertEventIdToBucket(eventId) { ... }
  convertEventPayloadToValue(info) { ... }

  async run(data) {
    // Data from the embedder
    const eventId = sharedStorage.context;

    // Data from the fenced frame
    const eventPayload = data.frameData;

    privateAggregation.sendHistogramReport({
      bucket: convertEventIdToBucket(eventId),
      value: convertEventPayloadToValue(eventPayload)
    });
  }
}

register('send-report', ReportingOperation);

规范

规范
Shared Storage API
# workletsharedstorage

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅