学习html——iframe

栏目: Html · 发布时间: 5年前

内容简介:iframe 作为html页面构成的基本元素之一,具备下面的特点关于html元素的构成的内容划分,这张图有一个很好的解释:

基本概念

iframe 作为html页面构成的基本元素之一,具备下面的特点

  • 行内元素,默认宽度300px,高度150px
  • 遵循流式布局(Flow content),位于body元素内
  • 段落内容(Phrasing content),可以构成一个段落
  • 嵌入资源(Embedded content),类似的还有video、img等
  • 可交互(Interactive content),类似的还有button、textarea等
  • 无子节点(Palpable content),iframe标签内部不嵌入任何元素,相反,div标签内就可以嵌入其他元素

关于html元素的构成的内容划分,这张图有一个很好的解释:

学习html——iframe

基本用法

iframe具备一些节点属性,如下:

  • src:资源的地址

    • 绝对地址: 会加载对应地址的资源
    • 相对地址: 会加载当前页面,默认同源
    • about:blank: 会显示一个空白页
  • srcdoc: iframe中需要render的内容,会覆盖掉对应的资源的内容
为什么要这么做?
在iframe中,你可以加载不同的内容,这类内容不会被浏览器再一次进行解释,举个例子来说,如果你想嵌入一些特别的符号,你就可以和sandbox联合使用(例子中的amp就是一个特殊符号)

<iframe
  sandbox
  srcdoc="<p>hey that's earl's table.
    <p>you should get earl&amp;me on the next cover."
  >
</iframe>
  • name:给嵌入的文档资源起的一个名字
  • sandbox:设置一些安全规则,规定了嵌入资源的一些行为,是否允许弹窗的行为
allow-forms, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-popups, allow-popups-to-escape-sandbox, allow-presentation, allow-same-origin, allow-scripts, allow-top-navigation, and allow-top-navigation-by-user-activation.
  • allowfullScreen: 规定嵌入资源是否允许全屏,true为允许
比如你嵌入了一篇文章,这篇文章有全屏观看的操作
<iframe
  src="http://article...."
>
</iframe>

// http://article....

<div
  id='article'
  onclick={handleFullClick}
>
// 省略文章内容
</div>

script:
const handleFullClick = () => {
  const article = document.getElementById('article');
  article.requestFullscreen();
}
  • allow,设置是否允许对应的特征策略
// 嵌入的iframe是否允许定位
<iframe src="https://maps.example.com/" allow="geolocation"></iframe>
  • referrerpolicy:是以枚举类型,设置了一些策略
enum ReferrerPolicy {
  "",
  "no-referrer",
  "no-referrer-when-downgrade",
  "same-origin",
  "origin",
  "strict-origin",
  "origin-when-cross-origin",
  "strict-origin-when-cross-origin",
  "unsafe-url"
};
  • contentDocument和contentWindow:返回的是iframe对应的document和window与当前页面的document和window对应。

ok,总结起来就是, iframe可以嵌入第三方资源,并且可以对第三方资源进行策略限制,为了安全,毕竟第三方,需要一定的兜底处理。

常用的业务场景

与iframe之间的通信

iframe是被浏览器的当前页面以第三方资源的形式嵌入的,如果想二者之间实现通信,就需要通过postMessage

otherWindow.postMessage(message, targetOrigin, [transfer]);
  • otherWindow: 窗口的引用,也就是你要向谁发送消息
  • message:发送消息的内容,会被 结构化克隆算法 序列化
  • targetOrigin:指定哪些窗口可以没收到消息
  • transfer:transfer中的对象,发送之后,就会被垃圾回收,不存储任何内容

Example:

父窗口:
// 假定iframe的id = iframe
document.getElementById('iframe').contentWindow.postMessage('123', '*');
子窗口:
Window.addEventListener('message', ({ data }) => {
    console.log('data');
    // 向父窗口发送消息
    if(window.parrent !== window.self) {
       window.parrent.postMessage('456', '*'); 
    }
})

参考资料


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

智慧社会

智慧社会

阿莱克斯·彭特兰 (Alex Pentland) / 汪小帆、汪容 / 浙江人民出版社 / 2015-4 / CNY 56.90

●如果要在大数据领域推举出一个代表性的科学家,阿莱克斯·彭特兰是一个无法令人忽略的名字。经过数年极具开创性的研究,社会物理学这个全新科学领域的根基已足够深厚。社会物理学是关于想法流的科学,正是在想法流的帮助下,我们才得以提高集体智能,促进智慧社会的形成。 ● 通过研究数以百万计的人在智能手机、GPS设备、互联网等地方留下的“数字面包屑”,大数据的应用已成为一股无法被忽视的力量。在大数据的应用......一起来看看 《智慧社会》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具