转载请注明出处: http://qiudeqing.com/html5/2015/05/25/iframe-tutorial.html

iframe标签使用

HTML inline Frame Element(<iframe>)表示一个嵌套上下文,用于在页面中嵌套其他页面.可以在文档流中任何地方放置iframe,如:iframe例子

iframe基本例子

以下代码设置iframe的最基础属性:

<iframe src="http://qiudeqing.com/html5/2015/05/25/iframe-tutorial.html"></iframe>

其中src属性指定iframe要展示文档的url. 尽管可以使用width, height, scrolling, frameborder属性来控制iframe的显示, 我们推荐使用css来控制样式.

iframe {
  border: 1px solid #ccc;
  width: 80%;
  height: 120px;
}

当加载文档高于iframe设置的高度时,会自动生成滚动条,可以通过使用javascript动态设置iframe高度来避免滚动条的出现.

可以使用CSS和JavaScript来修改iframe的样式和数学,例如:位置,尺寸,src.还可以使用JavaScript在文档之间传递数据.

校验: 包含iframe的文档可以通过HTML5校验,不能通过严格XHTML和严格HTML4.可以通过transitional XHTML和HTML4校验.一些属性在HTML4中是合法的,但是在HTML5中已经不合法.

iframe文档样式: iframe加载的文档不会从包含它的文档中继承样式.iframe内部的样式由它内部的CSS控制.

iframe与链接: New documents can be loaded into iframes using the link target attribute or JavaScript. Links inside iframes load new documents into the iframe by default, but you can set the target attribute to _parent to replace the containing document. See an example.

属性

iframe包含所有全局属性,以下是它自有的(仅列出未废弃的和兼容性好的属性).

为iframe加载新文档

页面加载完成之后也可以根据需求动态加载iframe,在线demo.

检测页面是否被其他页面通过iframe包含

可以通过判断window.top是否等于window.self来检测页面是否被其他页面包含,然后修改顶级窗口为文档内容

if (top !== self) {
  top.location = self.location;
}

根据文档高度设置iframe高度

默认情况下iframe不会根据嵌入文档高度改变高度,要完成高度自适应不出现滚动条,就需要动态改变iframe高度

脚本操作

可以使用普通document.querySelector()获取页面中指定的iframe元素,也可以通过window.frames获取当前浏览器窗口下内嵌的所有frame的类数组表示.通过window.frames[i]可以获取iframe元素,iframe.contentWindow获取iframe对应的window对象.

在frame内部,通过window.parent可以访问包含它的父窗口.

脚本访问frame内容时会受到same-origin policy的限制.需要跨域通信时可以使用window.postMessage.

常见操作

参考资料