HTML iframes


HTML Iframes

iframe 是用来在一个网页视图中嵌入另一个网页。

Syntax:

<iframe src="URL"></iframe>

src 特性指定了要显示的网页地址。

使用 widthheight 特性来设定大小。默认情况下以 pixels 为单位,也可以是百分数(像 “80%”)

<iframe src="demo_iframe.htm" width="200" height="200"></iframe>

默认情况下 iframe 元素有一个黑色的边框,通过设定元素 CSS特性 border:none; ,或者在 iframe 元素上添加 frameborder='0' 来去除边框。当然,你也可以修改成你喜欢的边框样式。

Use iframe as a Target for a link

链接 <a>target 特性值要等于 <iframe>name 特性值。这样点击链接,所指向的页面将在iframe中显示。

<iframe src="demo_iframe.htm" name="iframe_a"></iframe>
<p><a href="http://www.w3schools.com" target="iframe_a">W3Schools.com</a></p>

脚本

frame 元素包含在伪数组类型window.frames 变量中。

HTMLIFrameElement DOM 对象中,脚本可以通过 contentWindow 属性读取嵌入的 HTML 页面的 window 对象。

contentDocument 属性指向 iframe 中的 document 元素,等同于 contentWindow.document

在 iframe 内部,脚本可以通过 window.parent 指向父窗口。

但是!!!

脚本读取 frame 内容受制于同源策略。如果 frame 加载的内容来自其他 domain,则(其他窗口对象中的)大部分属性无法访问。

该策略同样适用于 frame 内部脚本访问其父窗口。

Cross-domain communication can still be achieved using window.postMessage()

自动跳转问题

在网页里设置一个iframe,然后嵌入其他的网站(如1688的商品页面)。出现了莫名其妙的问题:当iframe中的网页加载完毕后,当前浏览器tab页会自动跳转/打开为这个页面。

原因是这个网页里可能写入了以下代码:

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

判断当前页面的 location 是否为顶层的(即是否被嵌套到iframe里面了),如果是,则强制跳转。

解决办法:

<iframe src="..." security="restricted" sandbox="">

即增加了两个属性,前者是IE的禁止js的功能,后者是HTML5的功能。