如何防止 iframe 内的页面“冲出来”?
|
freeflydom
2026年3月3日 10:29
本文热度 133
|
:如何防止 iframe 内的页面“冲出来”?✅ 为 <iframe> 添加 sandbox 属性
sandbox 可以限制 iframe 内的页面执行某些操作,例如禁止脚本、禁止表单提交、禁止导航到父窗口等。
<iframe src="demo.ashx" sandbox="allow-scripts allow-same-origin"></iframe>
这个组合不包含 allow-top-navigation,所以会阻止 iframe 内的任何脚本试图改变顶层窗口的地址。
如果“冲出来”的原因是 ashx 返回的脚本中包含了 window.top.location = ... 或 parent.location = ...,那么 sandbox 就能有效阻止。
⚠️ 注意事项
sandbox 不会阻止 HTTP 重定向
如果 ashx 直接返回一个 302 重定向,浏览器会默默在 iframe 内加载新地址,不会影响父页面。但如果新地址又包含跳出脚本,脚本执行会被 sandbox 拦截。
sandbox 可能影响页面功能
allow-scripts allow-same-origin 已经允许了脚本和同源访问,通常足够满足大多数需求。但若 ashx 需要弹窗、表单提交、或加载插件等功能,可能需要额外添加 allow-popups、allow-forms 等标志。请测试原功能是否受影响。
跨域问题
如果 iframe 内页面与父页面不同源,sandbox 中的 allow-same-origin 仅相对于 iframe 内页面自身的源,不会赋予跨父页面的权限,这符合预期。
该文章在 2026/3/3 10:31:58 编辑过