是的!
MDN 有一个很好的解释和示例。
'strict-dynamic'源表达式指定,通过使用 nonce 或哈希明确授予标记中存在的脚本的信任,将传播给该根脚本加载的所有脚本。
因此,只要原始脚本是受信任的(通过 nonce),浏览器就允许它无限制地加载任何其他脚本。然后,由于这些脚本是受信任的,它们可以加载更多!
有一个警告,那就是脚本不能是“解析器插入”的。这可以防止 strict-dynamic 被用于 XSS 攻击。
因此,例如,这将被视为“解析器插入”并被阻止:
document.head.appendChild("<script src='https://example.com/xss-attempt.js' />");
但是,以编程方式构造脚本元素不涉及 HTML 解析,不太可能是 XSS 向量,因此是被允许的:
const script = document.createElement("script");
script.src = "https://example.com/script.js"
document.head.appendChild(script);
^^ 这基本上就是 loadScript() 的工作方式