稀土掘金 稀土掘金

iframe 页面嵌套

iframe

iframe作用

通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了

<iframe src="demo.htm"></iframe>

iframe属性

  1. iframe常用属性:
  2. frameborder:是否显示边框,1(yes),0(no)
  3. height:框架作为一个普通元素的高度,建议在使用css设置。
  4. width:框架作为一个普通元素的宽度,建议使用css设置。
  5. name:框架的名称,window.frames[name]时专用的属性。
  6. scrolling:框架的是否滚动。yes,no,auto。
  7. src:内框架的地址,可以使页面地址,也可以是图片的地址。
  8. srcdoc , 用来替代原来HTML body里面的内容。但是IE不支持
  9. sandbox: 对iframe进行一些列限制,IE10+支持 我们通常使用iframe最基本的特性,就是能自由操作iframe和父框架的内容(DOM). 但前提条件是同域. 如果跨域顶多只能实现页面跳转window.location.href.

那什么是同域 什么是跨域呢?

 A:<iframe id="mainIframe" name="mainIframe" src="/main.html" frameborder="0" scrolling="auto" ></iframe>
 B:<iframe id="mainIframe" name="mainIframe" src="http://www.baidu.com" frameborder="0" scrolling="auto" ></iframe>

使用A时,因为同域,父页面可以对子页面进行改写,反之亦然。
使用B时,不同域,父页面没有权限改动子页面,但可以实现页面的跳转

获取iframe里的内容

postMessage进行处理

  • 满足跨域(不同域名间通信)
  • message 可以传递对象
  • targetOrigin 可以指定哪些窗口接收信息

父向子传递信息

window.parent //获取上一级的window对象,如果还是iframe则是该iframe的window对象
window.top //获取最顶级容器的window对象,即,就是你打开页面的文档
window.self //返回自身window的引用。可以理解 window===window.self

parent.html

html

  <iframe id="iframe" src="http://dome.com/child.html"></iframe>

js

  const iframe = document.getElementByID('iframe')
  const sendChildData = {
    obj: {
      age: 15
    }
  }
  // 默认只要是嵌套的页面都可以接收信息 *
  iframe.contentWindow.postMessage(sendChildData, '*')

child.html

  • html
  <button id="btn">提交</button>  
  • js
  window.addEventListener('message', function (e) {
    if (!e.data) return
    const { obj } = e.data
    const btn = document.getElementByID('btn')
    btn.innerHTML =obj.age
  }, false)

子向父传递参数

需要明确  发送postMessage, 哪儿接受message

信息发给谁,谁就使用。在父向子时,需要找到 iframe窗口;同理子向父,就需要找到父窗口window.parent
message 直接使用 window.addEventListener('message', function () {}, false) 来进行处理即可

需要注意的一些问题

  • 需要iframe加载完,才能发送信息,否者子元素无法获取到,推荐使用 window.onload(因为onload是等所有资源加载才执行)
  • 由于并非是只有你一人使用 postMessage,因而最好相互沟通,或者传入特定参数进行判断,不然接收多次数据,就有些凌乱了

使用iframe可以完成什么

  • 常见的iframe逻辑触发,页面样式跟着改变,因而需要实时通知父元素,自己的高度。这在之前,更多地是使用setInterval定时去查询,但是多少总有些不好。而使用postMessage便可以简化,事件触发就调用一下发送postMessage事件

页面的使用

捕获1.PNG

捕获2.PNG

上面两张图是两个不同的页面但是它们的基本框架都是一样,每点击一次左边的导航栏改变的都是中间的内容区域。也就是说共同的框架都是没有改变的,改变的是中间的内容。

一些常用属性

参数解析
align根据周围的文字排列 iframe。
frameBorder是否显示框架周围的边框。
noResize框架是否可调整大小
scrolling框架是否有滚动条。
src被嵌入html中文档的URL。

但是嵌入后页面出现了滚动条,嵌入页面的滚动条影响了用户体验和页面美观所以我们得去除掉这个滚动条。其实就是设置 iframe的高度,等于内嵌网页的高度,这样就看不出来滚动条和嵌套痕迹。
自动调节iframe高度Js代码

//根据浏览器大小调整iframe高度
        reSize();
        window.onresize = reSetSize;
        function reSetSize() {
            var windowsHeight = window.innerHeight;
            document.getElementById("content").style.height = (windowsHeight-框架顶部高度) + "px";
        }

代做工资流水公司西宁办理银行流水账单肇庆办银行流水单岳阳办理车贷银行流水沈阳自存流水代开银川办入职银行流水青岛购房银行流水多少钱曲靖背调工资流水沈阳办理车贷流水揭阳银行流水电子版开具湛江离职证明制作洛阳房贷工资流水 打印哈尔滨打印银行流水账保定对公银行流水制作贵阳打个人银行流水镇江企业银行流水图片兰州对公账户流水代办邢台入职流水多少钱绵阳工资证明代做泉州对公流水制作厦门企业对公流水查询温州代做企业贷流水济南查工资流水银行对公流水办理济南银行流水PS制作济南工资银行流水模板许昌查询签证银行流水泰安工资流水app截图代做珠海对公账户流水样本荆州办理工作收入证明揭阳银行流水电子版查询香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化