WindowSharedStorage: selectURL() 方法
WindowSharedStorage 接口的 selectURL() 方法会执行一个 URL 选择操作,该操作在当前源的 SharedStorageWorklet 中添加的模块中注册。
注意: URL 选择输出门用于根据共享存储数据,从提供的列表中选择一个 URL 展示给用户。
语法
selectURL(name, urls)
selectURL(name, urls, options)
参数
name-
一个字符串,表示在共享存储 worklet 模块中注册的操作名称。它必须与使用
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,则会保留关联 worklet 的SharedStorageWorkletGlobalScope,并且可以再次运行该操作。因此,您需要为每个非最后一次使用的操作设置keepAlive为true。默认值false表示在运行操作后SharedStorageWorkletGlobalScope将被终止,且无法再次运行。 resolveToConfig可选-
一个布尔值。如果设置为
true,则run()返回的Promise的 fulfilled 值将是一个FencedFrameConfig对象,可用于通过其config属性将内容加载到<fencedframe>中。默认值false表示 fulfilled 值将是一个可用于将内容加载到<iframe>中的 URL。
返回值
一个 Promise,根据 resolveToConfig 选项的值,它会以 FencedFrameConfig 对象或表示 URL 的字符串进行 fulfilled。
异常
TypeError-
在以下情况下抛出
- 尚未通过
addModule()添加 worklet 模块。 urls为空或超出了允许的最大长度(具体取决于浏览器)。- 某个对象的
url属性包含一个无效的 URL。 - 共享存储已被禁用(例如,通过浏览器设置)。
- 调用站点未在成功的 隐私沙盒注册流程中包含共享存储 API。
- 尚未通过
示例
基本 A/B 测试
// 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 登录页。
规范
此特性似乎未在任何规范中定义。浏览器兼容性
加载中…