WindowSharedStorage:selectURL() 方法

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

selectURL()WindowSharedStorage 接口的一个方法,它执行一个在添加到当前源的 SharedStorageWorklet 中的模块中注册的 URL 选择操作

注意: URL 选择输出网关 用于根据共享存储数据从提供的列表中选择一个 URL 显示给用户。

语法

js
selectURL(name, urls)
selectURL(name, urls, options)

参数

name

一个字符串,表示在共享存储工作线程模块中注册的操作的名称。它必须与使用 SharedStorageWorkletGlobalScope.register() 注册操作时提供的名称匹配。

urls

一个对象数组,表示由 URL 选择操作在其中进行选择的 URL。每个对象包含两个属性

url

一个表示 URL 的字符串。

reportingMetadata 可选

一个对象,其中名称是事件类型,值是指向报告目标的 URL,例如 "click" : "my-reports/report1.html"。这些 URL 充当类型为 "shared-storage-select-url" 的报告提交的目标,通常通过 Fence.reportEvent()Fence.setReportEventDataForAutomaticBeacons() 方法调用提交。

options 可选

一个选项对象,它可以包含以下属性

data 可选

一个对象,表示执行操作所需的任何数据。

keepAlive 可选

一个布尔值。如果设置为 true,则关联工作线程的 SharedStorageWorkletGlobalScope 将保持活动状态,并且可以再次运行该操作。因此,对于不打算作为最后一个操作的每个操作,您都需要将 keepAlive 设置为 true。默认值 false 表示在操作运行后 SharedStorageWorkletGlobalScope 将终止,并且无法再次运行。

resolveToConfig 可选

一个布尔值。如果设置为 true,则 run() 返回的 Promise 的履行值将是一个 FencedFrameConfig 对象,可用于通过其 config 属性将内容加载到 <fencedframe> 中。默认值 false 表示履行值将是一个字符串,可用于将内容加载到 <iframe> 中。

返回值

一个 Promise,根据 resolveToConfig 选项的值,它将以 FencedFrameConfig 对象或表示 URL 的字符串的形式履行。

异常

TypeError

如果以下情况发生,则抛出

  • 尚未使用 addModule() 添加工作线程模块。
  • urls 为空或超过最大允许长度(特定于浏览器)。
  • 对象的 url 属性包含无效的 URL。
  • 共享存储已禁用(例如,通过浏览器设置)。
  • 调用站点在成功的 隐私沙盒注册流程 中未包含共享存储 API。

示例

基本 A/B 测试

js
// Randomly assigns a user to a group 0 or 1
function getExperimentGroup() {
  return Math.round(Math.random());
}

async function injectContent() {
  // Add the module to the shared storage worklet
  await window.sharedStorage.worklet.addModule("ab-testing-worklet.js");

  // Assign user to a random group (0 or 1) and store it in shared storage
  window.sharedStorage.set("ab-testing-group", getExperimentGroup(), {
    ignoreIfPresent: true,
  });

  // Run the URL selection operation
  const fencedFrameConfig = await window.sharedStorage.selectURL(
    "ab-testing",
    [
      { url: `https://your-server.example/content/default-content.html` },
      { url: `https://your-server.example/content/experiment-content-a.html` },
    ],
    {
      resolveToConfig: true,
    },
  );

  // Render the chosen URL into a fenced frame
  document.getElementById("content-slot").config = fencedFrameConfig;
}

injectContent();

请参阅 共享存储 API 着陆页以获取此示例的演练以及其他示例的链接。

规范

规范
共享存储 API
# dom-windowsharedstorage-selecturl

浏览器兼容性

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

另请参阅