是,sandbox=""默认启用全部限制:脚本不执行、表单不提交、无法访问父dom或localstorage,采用默认拒绝原则,必须显式添加allow-scripts等白名单权限才能放行对应能力。

iframe sandbox="" 为什么 JS 完全不执行?
因为 sandbox=""(或仅写 sandbox)不是“部分限制”,而是启用全部默认禁用项:脚本被硬性拦截,<script></script> 标签、内联事件(如 onclick)、eval()、甚至 document.write() 全部失效,控制台也不会报错——它连错误都不给你抛,直接静默丢弃。
必须显式加 allow-scripts 才能运行 JS。但注意:allow-scripts 单独存在时,仍禁止 document.write() 和同步 XHR(XMLHttpRequest.open(..., false)),这是浏览器强制行为,无法绕过。
- 常见误写:
sandbox="allow-scripts"写成sandbox="allow-scripts, allow-forms"→ 逗号会破坏 token 解析,实际只生效allow-scripts,(带逗号的非法值被忽略) - 调试技巧:在控制台执行
document.querySelector('iframe').sandbox,返回的是DOMTokenList,能看清当前真正生效的权限列表 - 如果 iframe 加载的是同域 HTML,但 JS 仍报
SecurityError访问localStorage,不是配额问题,是没开allow-same-origin——但这个 token 有前提,见下一条
allow-same-origin 为什么加了也没用?
allow-same-origin 不是“信任开关”,而是一个条件触发器:只有当 iframe 的 src 与父页面**协议 + 域名 + 端口完全一致**时,该 token 才被浏览器认可;否则直接忽略,哪怕你写了也等于没写。
例如父页是 https://app.example.com:8080/dashboard,iframe src 是 https://api.example.com/widget.html,即使只差一个子域名,allow-same-origin 就无效,localStorage 读写仍抛 SecurityError。
- 和
allow-scripts同时存在,才能让脚本访问自身 origin 的存储(localStorage、fetch()同源响应体可读) - 但它**永远不能解除 DOM 隔离**:iframe 内 JS 依然无法访问
window.parent或document,这是 sandbox 的底层设计,不是 bug - 生产环境嵌第三方内容(广告、评论框、用户上传 HTML)时,绝对不要加
allow-same-origin—— 这相当于主动放弃来源隔离
表单提交失败、弹窗被拦、自动播放静音,怎么配才刚好够用?
每个 allow-* token 控制一项具体能力,空格分隔即可组合。关键不是“全放开”,而是按需最小化放行:
- 要执行 JS + 弹出新窗口(如分享按钮调
window.open()):sandbox="allow-scripts allow-popups" - 要 JS + 表单提交(如嵌入的反馈表单):
sandbox="allow-scripts allow-forms";后端需支持 CORS,因为跨域提交本身不受 sandbox 影响,但响应处理受限制 - 需要用户点击触发下载(配合
<a download></a>):sandbox="allow-scripts allow-downloads"(Chrome 89+ / Edge 89+ 支持,Firefox/Safari 不支持) - 绝对避免
allow-top-navigation:它允许 iframe 直接执行top.location = '...',极易被用于钓鱼;真要跳转,应由父页监听postMessage后主动操作
Chrome 控制台报 Blocked script execution,但已加 allow-scripts?
这个错误明确指向缺失 allow-scripts,但如果你确认已加,大概率是以下三种情况之一:
- iframe 已加载完成,但后来通过 JS 动态设置了
sandbox属性(如el.sandbox = 'allow-scripts')→ 浏览器不支持运行时开启脚本能力,必须在初始 HTML 中声明 - iframe
src返回的是 404 或服务端重定向到非 HTML 资源(如 PDF、JSON),导致浏览器根本不解析 HTML 内容,自然不执行任何脚本 - 用了
srcdoc属性但未同步配置 sandbox 权限(srcdoc内容同样受 sandbox 限制,且比src更严格)
沙箱不是一层“防护罩”,而是一套启动时就冻结的权限快照。改配置、换内容、甚至 reload,都得重新走一遍完整加载流程,中间没有热更新通道。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











