iframe 详解、案例

这篇具有很好参考价值的文章主要介绍了iframe 详解、案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简单使用

我们通常使用iframe最基本的特性,就是能自由操作iframe和父框架的内容(DOM). 但前提条件是同域. 如果跨域顶多只能实现页面跳转

<iframe src="./iframeA.html"></iframe>  同域
or
<iframe src="https://cn.bing.com/"></iframe> 跨域

iframeA.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body style="height:500px">
  <div id="iframeAID">我是iframeA</div>
  <input type="text" id="date" value="2022-10-24"/>
</body>
</html>

iframe常用属性

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

获取iframe里的内容

主要的两个API就是contentWindow,和contentDocument,这两个API只是DOM节点提供的方式(即getELement系列对象)

// iframe.contentWindow, 获取iframe的window对象
// iframe.contentDocument, 获取iframe的document对象
<script>
    window.onload = function(){
    let obj= document.getElementById("iframe1");
    // 获取iframe的window对象
    let objWindow = obj.contentWindow
    console.log(objWindow); 
    console.log(objWindow.document); // 获取iframe的window对象的document
    console.log(objWindow.document.documentElement); // 获取html
    console.log(objWindow.document.head); // 获取head
    console.log(objWindow.document.body); // 获取body
    // 获取iframe的document
    let objContentDocument = obj.contentDocument
    console.log(objContentDocument);  
     // 结合Name属性,通过window提供的frames获取.
    console.log(window.frames['iframe1'].window);
    
    // 修改子页面样式
    let obj= document.getElementById("iframe1");
    let box = obj.contentWindow.document.getElementById("iframeAID")
    box.style.width = "500px";
    box.style.height = "100px";
    box.style["backgroundColor"] = "red";
    // // 获取子页面输入框值
    console.log(window.frames["iframe1"].document.getElementById("date").value);
}
</script>

在iframe中获取父级内容

同理,在同域下,父页面可以获取子iframe的内容,那么子iframe同样也能操作父页面内容。

在iframe中,可以通过在window上挂载的几个API进行获取.

window.parent 获取上一级的window对象,如果还是iframe则是该iframe的window对象
window.top    获取最顶级容器的window对象,即,就是你打开页面的文档
window.self   返回自身window的引用。可以理解 window===window.self
<script>
    // 方法一: 父页面可控可以使用
    window.onload = function(){
      console.log(window.frames.name);
      console.log(parent.window.frames.document.querySelectorAll("iframe") );
      let arr = Array.from(parent.window.frames.document.querySelectorAll("iframe"))
      arr.forEach(item => {
        if(window.frames.name === item.name) {
          console.log(item.id);
          console.log(item.width);
          console.log(item.height);
          console.log(item.src);
        }
      })
	}
	// 方法二: 建议使用
	window.onload = function(){
      parent.window.frames.document.querySelectorAll("iframe").forEach(item => {
        if(window.frames.location.href === item.src){
          console.log(item.id, '根据地址判断-- 我是iframeA');
        }
      })
    }
</script>

动态添加 iframe

<script>
    window.onload = function(){
      let iframeCon = document.querySelector('#container')
      let text; //传递的信息
      let iframe = document.createElement('iframe')
      iframe.id = "frame"
      iframe.style = "display:block;"
      iframe.name="polling"
      iframe.src="./iframeB.html"
      iframeCon.appendChild(iframe);
    }
</script>

iframe样式

默认情况下,iframe会自带滚动条,不会全屏

去掉滚动条

<iframe name="iframe1" id="iframe1" src="./iframeA.html" scrolling="no"></iframe>

设置 iframe的高为body的高

let iframe= document.getElementById("iframe1");
let objWindow = iframe.contentWindow;
let objDoc = objWindow.document;
iframe.height = objDoc.body.offsetHeight;

是否允许iframe设置为透明,allowtransparency 默认为false

<iframe name="iframe1" id="iframe1" src="./iframeA.html" allowtransparency="true"></iframe>

是否允许iframe全屏,allowfullscreen 默认为false

<iframe name="iframe1" id="iframe1" src="./iframeA.html" allowfullscreen="true"></iframe>

iframe安全性探索

iframe出现安全性有两个方面,一个是你的网页被别人iframe,一个是你iframe别人的网页

防嵌套网页

// 使用window.top来防止自己的网页被iframe.这段代码的主要用途是限定自己的网页不能嵌套在任意网页内
if(window != window.top){
    window.top.location.href = correctURL;
}
// 如果你想引用同域的框架的话,可以判断域名
try{
  top.location.hostname;  //检测是否出错
  //如果没有出错,则降级处理
  if (top.location.hostname != window.location.hostname) { 
    top.location.href =window.location.href;
  }
} catch(e){
  top.location.href = window.location.href;
}

在服务器上,对使用iframe的权限进行设置 X-Frame-Options

X-Frame-Options是一个相应头,主要是描述服务器的网页资源的iframe权限。目前的支持度是IE8+有3个选项:
DENY:		当前页面不能被嵌套iframe里,即便是在相同域名的页面中嵌套也不允许,也不允许网页中有嵌套iframe
SAMEORIGIN: iframe页面的地址只能为同源域名下的页面
ALLOW-FROM: 可以在指定的origin url的iframe中加载

X-Frame-Options: DENY  拒绝任何iframe的嵌套请求
X-Frame-Options: SAMEORIGIN 只允许同源请求,例如网页为 foo.com/123.php,則 foo.com 底下的所有网页可以嵌入此网页,但是 foo.com 以外的网页不能嵌入
X-Frame-Options: ALLOW-FROM http://s3131212.com 只允许指定网页的iframe请求,不过兼容性较差Chrome不支持

X-Frame-Options其实就是将前端js对iframe的把控交给服务器来进行处理。文章来源地址https://www.toymoban.com/news/detail-731026.html

//js
if(window != window.top){
    window.top.location.href = window.location.href;
}
//等价于
X-Frame-Options: DENY

//js
if (top.location.hostname != window.location.hostname) { 
    top.location.href =window.location.href;
}
//等价于
X-Frame-Options: SAMEORIGIN

到了这里,关于iframe 详解、案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTML + CSS + JavaScript【实战案例】 实现动画导航栏效果

    ​Hello~ 咱们今天一起来学习一个动画导航的小项目 HTML结构

    2024年02月03日
    浏览(48)
  • 前端= 结构(HTML)+ 样式(CSS)+ 行为(JavaScript)

    前端开发确实涵盖了行为(JavaScript)、样式(CSS)和结构(HTML)这三个主要方面。这三个方面在前端开发中密切协作,共同构建用户界面和用户体验。 结构(Structure):HTML 是用于定义页面结构的标记语言。通过使用 HTML 标签,可以创建网页的基本骨架,包括标题、段落、

    2024年02月13日
    浏览(44)
  • [HTML]Web前端开发技术26(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 数据类型 数据类型-字符型 数据类型-数值型 数据类型-布尔型 数据类型-其它类型 变量 转义字符 运算

    2024年02月20日
    浏览(53)
  • 前端基础自学整理|HTML + JavaScript + DOM事件

    目录 一、HTML 1、Html标签 2、Html元素 3、基本的HTML标签 二、CSS 样式 层叠样式表 三、JavaScript 使用示例 四、HTML DOM  通过可编程的对象模型,javaScript可以: window document 1、查找HTML元素 2、操作HTML元素 获取元素的属性 四、HTML DOM事件 ⚠️是DOM提供的API Html是用来描述网页的一

    2024年02月22日
    浏览(39)
  • [前端开发] 常见的 HTML CSS JavaScript 事件

    代码示例指路 常见的 HTML、CSS、JavaScript 事件代码示例 在 Web 开发中,事件是用户与网页交互的重要方式之一。通过事件,用户可以与页面元素进行交互,触发相应的功能或效果。本文将介绍常见的 HTML、CSS、JavaScript 事件,以及事件对象和事件代理的概念。 鼠标事件 鼠标事

    2024年02月19日
    浏览(40)
  • 前端随笔:HTML/CSS/JavaScript和Vue

    最近因为工作需要,需要接触一些前端的东西。之前虽然大体上了解过 HTML 、 CSS 和 JavaScript ,也知道 HTML 定义了内容、 CSS 定义了样式、 JavaScript 定义了行为,但是却没有详细的学习过前端三件套的细节。而最近的工作中需要使用 Vue ,并且想到未来的工作中使用 Vue 能够更

    2024年02月16日
    浏览(33)
  • 前端:运用HTML+CSS+JavaScript实现拼图游戏

    前一段时间突然来了一个想法,就是运用前端知识实现一个拼图游戏,但是不知道具体怎样实现。今天,想到既然实现不了现实中我们看到的那种拼块,那么就用正方形来代替吧! 效果如下: 想到就是当小的图片块放到合适的位置上时,表示拼图完成。 1. 前端布局 运用cs

    2024年02月08日
    浏览(37)
  • 前端三剑客 HTML+CSS+JavaScript ② HTML相关概念

    他们这样形容我 是暴雨浇不灭的火                                                       —— 24.4.18 学习目标         理解                 HTML的概念                 HTML的分类                 HTML的关系                 HTML的语义化         应用

    2024年04月23日
    浏览(40)
  • 前端技术Html,Css,JavaScript,Vue3

    1.基本标签 2.文本格式化 3.链接 4.图片 5.无序列表 6.有序列表 7.表格 8.表单 1.选择器 2.文本和字体 3.链接 4.隐藏 5.定位position 6.浮动 7.对齐 8.图像 1.输出 2.函数 3.常用事件 4.DOM 5.改变Html 6.DOM 元素 (节点) 尾部创建新的 HTML 元素 (节点) - appendChild() 头部创建新的 HTML 元素 (节点)

    2024年02月13日
    浏览(43)
  • 前端(html+css+javascript)作业--展现家乡的网页

    期末期间,老师布置了前端作业,现在放到这里,给各位同志参考。 桂平市是广西壮族自治区的一个美丽的城市,拥有丰富的历史文化和自然景观,属于贵港市管辖,那为什么是看起来是市级而不是县级,其实他就是个 市级县,比县大一些人口多一些就叫做市了。 此网页不

    2024年01月17日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包