`

html5-iframe的新特性

阅读更多
相对于html4.0来说,html5在安全性方面有了很大的提升,甚至html5的标志看上去就像一块盾牌。其中iframe的sandbox特性,就是html5安全中很重要的组成部分部分。于此同时还带来了一个新的mime类型,text-html/sandboxed。
   下面先简单介绍一下html5的iframe特性:
   相对于我们平时所熟知的<iframe>标签的特性,比如“src”,“width”,"name"等,html5中iframe多了如下三个属性:
   srcdoc, sandbox , seamless,其中最令人眼前一亮的莫过于sandbox属性了
   一、<iframe>的sandbox属性。
   在html5页面中,可以使用iframe的sandbox属性,比如:<iframe src="http://alibaba.com" sandbox>,sandbox后面如果不加任何值,就代表采用默认的安全策略,即:iframe的页面将会被当做一个独自的源,同时不能提交表单,以及执行javascript脚本,也不能让包含iframe的父页面导航到其他地方,所有的插件,如flash,applet等也全部不能起作用。简单说iframe就只剩下一个展示的功能,正如他的名字一样,所有的内容都被放入了一个单独的沙盒。
    我写了两个html页面简单演示了一下iframe的sandbox功能,由iframe_sandbox.htm去包含inside.htm
    iframe_sandbox.htm代码如下:
======================================================================
<!DOCTYPE html>      <!--html5头 -->
<html>
<iframe src="inside.htm" sandbox ></iframe>  <!-- iframe 标签,其中sandbox没有值,表示默认策略-->
</html>
======================================================================
  inside.htm代码如下:
======================================================================
<!DOCTYPE html>
<html>
本窗口<script>document.write(window.location.href)</script><br>
父窗口<script>document.write(window.parent.location.href)</script><br>
<a href="http://hi.baidu.com/dingody/home" target="_blank">blank</a>
<a href="http://hi.baidu.com/dingody/home" target="_self">self</a>
<a href="http://hi.baidu.com/dingody/home" target="_parent">parent</a>
<a href="http://hi.baidu.com/dingody/home" target="_top">top</a>
<form id="form" action="http://hi.baidu.com/dingody/home" >
<input type="submit" value="sub">
</form>
</html>
======================================================================
chrome浏览器(ff和ie都暂不支持)打开iframe_sandbox.htm显示如下:


iframe页面的脚本并没有执行,同时blank,paren,top链接全部失效,sub按钮也没有反应。只有self安全可以导向到指定页面。
1、 接下来修改sandbox属性为allow-scripts,<iframe id="test" src="inside.htm" sandbox="allow-scripts"></iframe>
显示如下:


iframe页面的脚本可以执行,但是依然不能访问父页面的属性,同时其他链接和按钮依然失效。
2、修改sandbox属性为 allow-top-navigation:
      blank,self,parent,top链接全部生效
3、修改sandbox 属性为: allow-forms
      sub按钮点击生效
4、修改sandbox属性为: allow-scripts allow-same-origin,显示如下:
      同源策略生效:


以上的这些例子简单的演示了sandbox的用法。
       其实一旦我们在sandbox属性里面同时使用了allow-scripts allow-same-origin属性的话,子页面就可以操纵父页面的标签了,也就是说,在同时设置了allow-script allow-same-origin的时候,sandbox策略就失效了。html5的官方文档里面也有这样的提示:
Setting both the allow-scripts and allow-same-origin keywords together when the embedded page has the same origin as the page containing the iframe allows the embedded page to simply remove the sandbox attribute.
      我在测试子页面remove父页面的iframe的sandbox属性的时候遇到一个问题,那就是必须子页面进行一次刷新才能生效。比如这样的代码:
      inside.htm代码如下:
======================================================================
document.write(window.parent.document.getElementById("test").sandbox="allow-scripts allow-top-navigation allow-same-origin");
======================================================================
经过测试发现,在浏览器第一次渲染的时候,代码是不生效的,只有iframe中的页面重新载入,才能突破sandbox。
猜测是这样的情况。
1、浏览器经过第一次渲染的时候,子页面的sandbox属性是allow-scripts allow-same-origin,这个时候渲染已经完成,虽然子页面将父页面的iframe属性设置为allow-scripts allow-top-navigation allow-same-origin,但是子页面里面的dom属性依然不变。
2、经过一次子页面的刷新之后,子页面的dom转换成具有allow-scripts allow-top-navigation allow-same-origin属性的dom,所以成功。
下面给出一个子页面操作父页面sandbox属性的例子,通过一次页面刷新实现:
<script>
function reurl(){
url = location.href;
var times = url.split("?");
if(times[1] != 1){
url += "?1"; 
self.location.replace(url);
}
}
if(window.parent.length>0){onload=reurl;}
document.write(window.parent.document.getElementById("test").sandbox="allow-scripts allow-top-navigation allow-same-origin");
</script>
二、iframe的其他属性:
目前应该还没有浏览器支持这些,仅仅停留在文档上
srcdoc属性用法如下:<iframe srcdoc="<p>dingo</p>"></iframe>
seamless属性用法如下:<iframe seamless="seamless" src="xxx"></iframe> 效果就是渲染出来的页面你看不出是用iframe内嵌的,而是与现在的文档相融合,去掉了恶心的边框。
三、text-html/sandboxed
iframe的sandbox属性另外附带了一个新的MIMEtype,text-html/sandboxed。这个目前应该也没有浏览器实现。格式位text-html/sandboxed的内容将会跟设置了sandbox属性的iframe子页面一样,被严格控制。
  • 大小: 18.2 KB
  • 大小: 12.6 KB
  • 大小: 15.4 KB
分享到:
评论

相关推荐

    html的一些面试题.pdf

    8. HTML5相比HTML4有哪些新特性? 9. `&lt;link&gt;`和`&lt;script&gt;`标签分别用来做什么? 10. 行内元素和块级元素的区别是什么? 11. HTML5中的表单元素有哪些新变化? 12. 什么是图像地图(image map)? 13. HTML注释的...

    从入门到精通HTML5——PDF——网盘链接

     第11章 HTML 5的新特性 221  视频讲解:6分钟  11.1 谁在开发HTML 5 222  11.2 HTML 5的新认识 222  11.2.1 兼容性 222  11.2.2 实用性和用户优先 222  11.2.3 化繁为简 223  11.3 无插件范式 223  11.4 ...

    IFrame:在您的Web应用程序中嵌入另一个HTML文档

    特性 滚动-[自动,始终,从不]定义当内容超过IFrame大小时是否滚动。 即使不是严格需要,也将始终显示滚动条。 默认值:自动设置此属性不能保证预期的行为,所显示网站的样式对iframe的滚动行为有很大影响。 URL...

    WINDOWS IE10

     IE10 PP2支持的新技术包括CSS3 Floats、HTML5 Drag-drop、File Reader API、Media Query Listeners,其中有三个新特性:利用web workers增强页面表现效果;通过Drag-drop使得应用程序与浏览器更加融为一体;开通...

    整理HTML5的一些新特性与Canvas的常用属性

    1.HTML5的内容类型 内容类型 描述 内嵌 向文档中添加其他类型的内容,例如audio、video、canvas和iframe等 流 在文档和应用的body中使用的元素,例如form、h1和small 标题 段落标题,例如h1、h2和hgroup等 ...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 -更新/basic/login.aspx示例,使用验证图片(feedback:kedee)。 -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_autopostback.aspx...

    ExtAspNet_v2.3.2_dll

    -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和...

    移动端H5页面返回并刷新页面(BFcache)的方法

    项目中的需求: ...原因:部分浏览器在后退时不会触发onload事件,這是HTML5世代浏览器新增的特性之一——Back-Forward Cache(简称bfcache) 什么是bfcache? bfcache,即back-forward cache,可称为

    H5开发框架源码 H5developmentframework.rar

    移除了部分插件的限制,增加了一些适用特性,例如Popover弹出的内容可以指定已有的标内容,Modal对话框可以自动使用iframe弹出整个页面内容等; 2.增加了实用的视图组件,包括卡片、评论、列表、文章、仪表盘、看板...

    HTML基础入门视频课程

    本课程从零开始,以通俗易懂的方式讲解HTML技术,手把手教你掌握每一个知识点。课程中使用的所有英文单词都会逐一...内嵌框架iframe6.HTML5简介、新特性、新增内容教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

    fee-interview-questions:前端面试题库

    说说HTML5有那些新特性,移除了哪些元素? HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。 canvas, video, audio, localStorage, sessionStorage, Geolocation,APP Cache,web ...

    利用H5特性FormData实现不刷新文件上传

    但是Html5是个好东西,他提供了FormData,FormData可以帮助我们拼凑参数,乃至文件资源。这样,我们就可以轻松用$.ajax不刷新上传。当然也不需要iframe。 代码 下列是前端部分。 &lt;!DOCTYLE html&gt; &lt;meta ...

    tio-websocket-showcase:fork并修改自tio-websocket-showcase官方demo,需要配合客户端demo使用

    tio-websocket-showcase 这个工程依赖最新的t-io代码,如果发现编译不通过...用chrome打开page/index.html,这是个用iframe嵌入了两个demo.html的页面,方便在一个窗口查看群聊效果 可以愉快地聊天了 使用说明 服务器端

    SnappySnippet:Chrome扩展程序,可轻松从选定元素中提取CSS和HTML

    其他特性: 清理HTML(删除不必要的属性,修复缩进) 优化CSS以使其可读完全可配置(可以关闭所有过滤器) 出色的UI,要归功于Bootstrap和Flat-UI项目与:before和:after伪元素一起使用安装下载扩展程序,然后通过...

    h5player:网页播放器增强脚本,支持:播放进度记录,播放倍率记录,快进快退,倍速播放,画面缩放等

    h5player为tampermonkey网页播放器增强脚本项目地址: : 脚本安装地址: ://greasyfork.org/scripts/381682特性兼容广泛,所有存在视频标签的网页均支持甚至嵌在iframe,shadowdom下合理兼容支持跨域控制,跨域限制...

    react-visualizer:React组件中的可视化器

    React可视化器React组件中的Visualizer特性cdn将用于可视化程序的CDN的URL。 默认值: : scripts -在可视化工具之前要在iframe中加载的脚本数组viewURL dataURL config配置或对象的URL version -版本负荷或auto选择...

    storage:一个基于HTML5 Web本地存储的扩展解决方案,虽然IE早期不支持本地存储(localStorage),但是可以通过userData来实现更多的本地数据存储

    Storage.js是一个基于HTML5 Web本地存储的扩展解决方案,虽然IE早期不支持本地存储(localStorage),但是可以通过userData来实现更多的本地数据存储。由于cookie本身的不可替代性,Storage.js也添加了对cookie的封装...

    JavaScript使用HTML5的window.postMessage实现跨域通信例子

    JavaScript由于同源策略的限制,跨域通信一直是棘手的问题。... window.name 保存数据以及跨域 iframe 静态代理动态传输方案,充分的运用了window.name因为页面的url改变而name不改变的特性。 各种方案

Global site tag (gtag.js) - Google Analytics