iframe的运用---特别是获取父子页面的元素

简介: iframe的运用---特别是获取父子页面的元素

iframe的运用---特别是获取父子页面的元素


TL;DR

  • 使用<iframe src="./iframe.html" frameborder="0" scrolling="auto" name="iframe"></iframe>
  • 同域的情况下,当前页面获取iframe页面里面的元素的话,必须使用加载事件,window.frames.iframeName.onload = ...window.frames.iframeName.document就是iframe的document
  • 同域的情况下,子页面获取父页面元素的话,window.parent.document就是父页面的document
  • 查看示例demodemo地址

简单的概念

  • iframe功能:能够将另一个HTML页面嵌入到当前页面中。
  • 父页面:iframe元素存在的页面,也就是当前页面
  • 子页面:iframe的src的页面,也就是当前页面里面嵌套的页面
  • 同域:子页面和父页面的地址同域(协议端口域名均相同)
  • 跨域:子页面和父页面的地址跨域
  • !!!跨域的父子页面不能进行获取元素的操作,只能有显示的操作
  • 查看示例demodemo地址

简单使用和属性介绍

<iframe src="./iframe.html" frameborder="0" scrolling="auto" name="iframe"></iframe>

属性如下:

  • frameborder:是否显示边框,1(yes),0(no)
  • height:框架作为一个普通元素的高度,建议在使用css设置。默认值为150px。
  • width:框架作为一个普通元素的宽度,建议使用css设置。
  • name:框架的名称,window.frames[name]时专用的属性。
  • scrolling:框架的是否滚动。yes,no,auto。
  • src:内框架的地址,可以使页面地址,也可以是图片的地址。
  • srcdoc , 用来替代原来HTML body里面的内容。但是IE不支持。
  • sandbox: 对iframe进行一些列限制,IE10+支持

当前页面获取iframe页面的元素---必须是同域

window.frames可以获取页面所有的iframe元素。 获取iframe的的window:

  • window.frames.iframeName,主要这里的iframeName是iframe的name属性值。这时候就可以用window的一系列属性了。
  • 或者,document.getElementById("frameid").contentWindow
  • 这里特别注意,必须等iframe页面都加载完了才能获取iframe里面的元素,window.frames.iframeName.onload = funcetion(){...}
<!-- index.html -->
<iframe src ="/iframe.html" id="test" name="test" scrolling="yes">
 <p>Your browser does not support iframes.</p>
</iframe>
<script>
  // iframe.html里面的window
  var iwindow_alias = document.getElementById("testid");
  var iwindow = window.frames.test;
  // 获取iframe的元素就需要在iframe加载后
  iwindow.onload = function() {
    // iframe.html里面的document
    var idoc = iwindow.document;
    // iframe.html里面的body
    var ibody = idoc.body;
    // iframe.html里面的元素
    var iele = iwindow.document.querySelector("a");
    console.log(idoc, ibody, iele);
  };
</script>

iframe获取父页面的元素 --- 必须是同域

在iframe页面里,通过访问window.parent,引用它的父框架的window。

<!-- iframe.html  -->
  <button>点击</button>
  <script>
    // index.html里面的window
    var pwindow = window.parent
    // index.html里面的document
    var pdoc = pwindow.document
    // index.html里面的body
    var pbody = pdoc.body
    // index.html里面的a元素之类的
    var pele = pdoc.querySelector('a')
  </script>

iframe的使用

mdn上iframe的使用

判断iframe框架是否加载完成的方法

目录
相关文章
|
前端开发 算法 网络安全
图片滑块验证功能很难吗?做个可以自己抠形状的图片滑块验证组件
图片滑块验证功能很难吗?做个可以自己抠形状的图片滑块验证组件
543 0
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
2121 0
|
存储 Kubernetes 调度
k8s教程(pod篇)-DaemonSet(每个node上只调度一个pod)
k8s教程(pod篇)-DaemonSet(每个node上只调度一个pod)
612 0
|
存储 安全 关系型数据库
mysql-8.0.27-linux版本安装手册,让你一路畅通无阻,2分钟就完成安装
mysql-8.0.27-linux版本安装手册,让你一路畅通无阻,2分钟就完成安装
mysql-8.0.27-linux版本安装手册,让你一路畅通无阻,2分钟就完成安装
|
10月前
|
Web App开发 前端开发 API
闪电优化术:3个前端性能技巧让你的网页飞起来
闪电优化术:3个前端性能技巧让你的网页飞起来
278 84
|
关系型数据库 MySQL 数据库
mysql 不需要使用密码就可以登录
最近发现一个问题, 就是我等了mysql客户端可以不输入密码. 直接输入mysql -u root 回车 或者 输入一个错的密码,都可进入到下面的界面. 在Navicat不用输入密码, 或者数据错的密码都可以连接数据库, 这比较愁人.
854 0
mysql 不需要使用密码就可以登录
|
前端开发 JavaScript 数据安全/隐私保护
从0到1开发一个自己的npm包完整过程
创建自己的 npm 包涉及六个步骤:1) 注册 npm 账号;2) 使用 `npm init` 初始化项目,确保 package.json 的 name 唯一且 private 为 false;3) 开发项目,可封装 UI 组件、函数库或命令行工具;4) 本地调试,通过 `npm link` 在项目中测试;5) `npm login` 登录账号,可能需切换至官方仓库;6) 使用 `npm publish` 发布项目。注意版本号递增,无意义的包不建议发布。
从0到1开发一个自己的npm包完整过程
热电材料:温差发电的绿色能源技术
【10月更文挑战第17天】温差发电技术利用热电材料将热能直接转换为电能,具有环境友好和高效的特点。本文介绍了热电材料的基础知识、温差发电的工作原理及应用案例,包括人体体温发电、海洋温差发电和工业余热利用,并展望了热电材料的未来发展。
1101 3
|
运维 监控 自动驾驶
什么是系统的鲁棒性?
本文探讨了系统鲁棒性的重要性及其评估方法。鲁棒性指系统在异常情况和不确定性因素下保持稳定运行的能力,是系统稳定性和可靠性的关键指标。文章从系统设计、自我修复及数据处理三方面评估鲁棒性,并提出预防、检测与恢复的策略。通过具体措施如代码质量、异常预防、监控和冗余备用等,提升系统在各种挑战下的表现。这些策略不仅理论性强,也与日常开发实践紧密相连。
1551 0
|
测试技术 持续交付 数据处理
Python动态类型深度解析与实践
Python动态类型深度解析与实践
753 1