TrustedTypePolicyFactory: createPolicy() 方法

有限可用性

此功能不是基线,因为它在一些使用最广泛的浏览器中无法正常工作。

注意:此功能在 Web Workers 中可用。

createPolicy() 方法是 TrustedTypePolicyFactory 接口的方法,它创建 TrustedTypePolicy 对象,该对象实现作为 policyOptions 传递的规则。

默认策略

在 Chrome 中,名为“default”的策略会创建一个特殊策略,如果将字符串(而不是 Trusted Type 对象)传递到注入接收器,该策略将被使用。这可以在从将字符串插入到注入接收器的应用程序过渡到使用 Trusted Type 对象的应用程序的过程中使用。

注意:上述行为尚未在规范中确定,可能会在未来发生变化。

警告:宽松的默认策略可能会破坏使用 Trusted Types 的目的,因此应该使用严格的规则定义它,以确保它不能用于运行危险代码。

语法

js
createPolicy(policyName, policyOptions)

参数

policyName

包含策略名称的字符串。

policyOptions 可选

用于将字符串转换为受信任值的自定义函数。

createHTML(input[,args])

回调函数,以字符串的形式表示,包含在创建 TrustedHTML 对象时运行的代码。

createScript(input[,args])

回调函数,以字符串的形式表示,包含在创建 TrustedScript 对象时运行的代码。

createScriptURL(input[,args])

回调函数,以字符串的形式表示,包含在创建 TrustedScriptURL 对象时运行的代码。

返回值

一个 TrustedTypePolicy 对象。

异常

TypeError

如果策略名称受到 内容安全策略 trusted-types 指令 的限制,并且此名称不在允许列表中,则会抛出此异常。

TypeError

如果名称是重复的,并且 内容安全策略 trusted-types 指令 未使用 allow-duplicates,则会抛出此异常。

示例

以下代码创建一个名为 "myEscapePolicy" 的策略,该策略定义了一个 createHTML() 函数,该函数用于对 HTML 进行清理。

js
const escapeHTMLPolicy = trustedTypes.createPolicy("myEscapePolicy", {
  createHTML: (string) => string.replace(/</g, "&lt;"),
});

创建默认策略

在一个使用内容安全策略强制执行 Trusted Types 的网站上,其中 require-trusted-types-for 指令设置为 script,任何接受脚本的注入脚本都期望一个 Trusted Type 对象。如果插入的是字符串,则将使用以下默认策略。

此策略会向控制台记录一条消息,以提醒开发人员重构应用程序的这部分以使用 Trusted Type 对象。它还会将默认策略使用情况、类型和注入接收器的详细信息追加到返回的值中。

js
trustedTypes.createPolicy("default", {
  createScriptURL: (s, type, sink) => {
    console.log("Please refactor.");
    return `${s}?default-policy-used&type=${encodeURIComponent(
      type,
    )}&sink=${encodeURIComponent(sink)}`;
  },
});

规范

规范
Trusted Types
# dom-trustedtypepolicyfactory-createpolicy

浏览器兼容性

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