开启辅助访问
帐号登录 |立即注册

IFRAME禁止新窗口跳转

 
近弄个东西,需要用到iframe,但是加载的网页中有_blank,不能让他跳出来。
如果想让目的网址的_blank删除,这是不可能的。
网上找了很多的资料,要么是跨域不能修改.要么就根本牛头不对马嘴


后来,看到了html5里iframe有个叫sandbox的属性把 iframe 里的网页给关笼子里的属性

所以,就来找找这个的用法.


<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"
    src="https://www.qwbm.com"
    style="border: 0; width:130px; height:20px;"></iframe>


我们在上面的示例中看到了一些可能的沙盒标志,现在让我们更详细地研究一下该属性的内部工作原理。

给定具有空沙盒属性 ( <iframe sandbox src="..."> </iframe>) 的 iframe,框架文档将被完全沙盒化,并受到以下限制:

JavaScript 不会在框架文档中执行。这不仅包括通过脚本标签显式加载的 JavaScript,还包括内联事件处理程序和 javascript: URL。这也意味着将显示 noscript 标签中包含的内容,就像用户自己禁用了脚本一样。
加框的文档被加载到一个唯一的原点,这意味着所有的同源检查都将失败;独特的起源与其他起源不匹配,甚至它们自己也不匹配。除其他影响外,这意味着文档无法访问存储在任何来源的 cookie 或任何其他存储机制(DOM 存储、索引数据库等)中的数据。
框架文档无法创建新窗口或对话框(例如,通过window.open或 target="_blank")。
无法提交表格。
插件不会加载。
框架文档只能导航自己,不能导航其顶级父级。设置window.top.location会抛出异常,点击链接 target="_top"无效。
自动触发的功能(自动聚焦的表单元素、自动播放视频等)被阻止。
无法获得指针锁。
框架文档包含的seamless属性被忽略。iframes
这是非常严格的,加载到完全沙盒中的文档iframe 确实构成的风险很小。当然,它也没有多大价值:对于一些静态内容,您可能可以使用完整的沙盒来摆脱困境,但大多数时候您会希望稍微放松一下。

除了插件之外,这些限制中的每一个都可以通过在沙箱属性的值中添加一个标志来解除。沙盒文档永远不能运行插件,因为插件是未沙盒的本机代码,但其他一切都是公平的游戏:

allow-forms允许表单提交。
allow-popups允许弹出窗口(window.open()、showModalDialog()、target=”_blank”等)。
allow-pointer-lock允许(惊喜!)指针锁定。
allow-same-origin允许文件保持其来源;从中加载的页面https://example.com/将保留对该来源数据的访问权限。
allow-scripts允许 JavaScript 执行,也允许特性自动触发(因为通过 JavaScript 实现它们很简单)。
allow-top-navigation允许文档通过导航顶级窗口跳出框架。
考虑到这些,我们可以准确评估为什么我们最终会在上面的 Twitter 示例中使用特定的沙盒标志集:

allow-scripts是必需的,因为加载到框架中的页面会运行一些 JavaScript 来处理用户交互。
allow-popups是必需的,因为该按钮会在新窗口中弹出一个推文表单。
allow-forms是必需的,因为推特表单应该是可提交的。
allow-same-origin是必要的,否则 twitter.com 的 cookie 将无法访问,并且用户无法登录以发布表单。
需要注意的重要一点是,应用于框架的沙盒标志也适用于在沙盒中创建的任何窗口或框架。这意味着我们必须添加allow-forms到框架的沙箱中,即使表单只存在于框架弹出的窗口中。

使用该sandbox属性后,小部件仅获得它所需的权限,并且插件、顶部导航和指针锁定等功能仍然被阻止。我们降低了嵌入小部件的风险,没有任何不良影响。这对所有相关人员来说都是一场胜利。

回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

友情链接
  • 艾Q网

    提供设计文章,教程和分享聚合信息与导航工具,最新音乐,动漫,游戏资讯的网站。