Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • JavaScript

    • js 编码指南
    • 日期使用斜杠 点 中划线分隔的不同
    • forEach 会改变原数组值吗
    • 前端表单验证常用的正则表达式 - reg
    • JS 如何取得 URL 里的参数
    • JavaScript 数组去重
    • JavaScript 循环中断研究与总结-关键字篇
    • JavaScript 循环中断研究与总结-用法篇
    • js 中的 Error
    • 跳出 forEach
    • Location 对象
    • Date 方法预览
    • Reg 正则中的问题
    • JavaScript toFixed() 方法
    • query 和 params 的使用区别
    • axios post 请求中下载文件流
    • 实用的 js 技巧
    • JS 之数组的几个不 low 操作
    • 深入浅出深拷贝与浅拷贝
    • 如何实现一个深拷贝
    • 使用 iframe 中的一些问题
      • 让动态的 iframe 内容高度自适应
      • iframe 标签 父子页面传值
      • 使用 video.js 时, iframe 内嵌视频无法全屏的问题
    • 在 js 中更好地使用数组
    • echarts 在坐标轴两侧各增加一格坐标
    • 从头认识js的事件循环模型
    • moment 根据周截至日算出指定月有几周及开始结束日期
    • 正则 reg 中 /number 的用法
    • 正则 reg 中 match 和 exec 异同
  • TypeScript

  • Vue

  • ElementUI

  • React

  • AntD

  • 前端
  • JavaScript
Henry
2018-10-14
目录

使用 iframe 中的一些问题

由于业务需要, 经常要在网页中插入 iframe, 记录一下自己遇到的问题

# 让动态的 iframe 内容高度自适应 (opens new window)

这里只贴最终解决方法, 具体过程可以点击上面链接查看

setTimeout 版:

var iframes = document.getElementsByTagName('iframe')

for (var i = 0, j = iframes.length; i < j; ++i) {
  // 放在闭包中,防止 iframe 触发 load 事件的时候下标不匹配
  ;(function(_i) {
    iframes[_i].onload = function() {
      this.style.visibility = 'hidden'
      // this.style.display = 'none';

      // 提前还原高度
      this.setAttribute('height', 'auto') // 或设为''

      // 再在下一轮事件循环中设置新高度
      setTimeout(function() {
        iframes[_i].setAttribute('height', iframes[_i].contentWindow.document.body.scrollHeight)

        iframes[_i].style.visibility = 'visible'
        // iframes[_i].style.display = 'block';
      }, 0)
    }
  })(i)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

onbeforeunload 版

var iframes = document.getElementsByTagName('iframe')

for (var i = 0, j = iframes.length; i < j; ++i) {
  // 放在闭包中,防止 iframe 触发 load 事件的时候下标不匹配
  ;(function(_i) {
    iframes[_i].onload = function() {
      this.contentWindow.onbeforeunload = function() {
        iframes[_i].style.visibility = 'hidden'
        // iframes[_i].style.display = 'none';

        iframes[_i].setAttribute('height', 'auto')
      }

      this.setAttribute('height', this.contentWindow.document.body.scrollHeight)

      this.style.visibility = 'visible'
      // this.style.display = 'block';
    }
  })(i)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# iframe 标签 父子页面传值 (opens new window)

网上关于父子页面传值的方法很多, 为什么推荐这个呢? 因为当时需要动态改变 iframe 的 src 值, 每次都需要先将 src 清空, 再等页面渲染好后再给 src 赋值, 很麻烦, 但如果你在 src 后面加一个时间戳, 就不用每次先清空再赋值了, 而且也可以传递参数, 一举两得

1. 子页面取父页面的值

采用 url 传值的方式 ?+ &

<iframe src="child.html?a=1&b=2&c=3"></iframe>
1

这样, 在子页面的 js 中便可以取值, 将取值方法封装为一个 function

function Request(argname) {
  var url = document.location.href
  var arrStr = url.substring(url.indexOf('?') + 1).split('&')
  //return arrStr;
  for (var i = 0; i < arrStr.length; i++) {
    var loc = arrStr[i].indexOf(argname + '=')
    if (loc != -1) {
      return arrStr[i].replace(argname + '=', '').replace('?', '')
      break
    }
  }
  return ''
}
1
2
3
4
5
6
7
8
9
10
11
12
13

这样就可以轻松取出所有的参数值

var a = Request('a')
var b = Request('b')
var c = Request('c')
1
2
3

2. 子页面调用父页面的方法

子页面调用父页面方法, parent. 方法名()即可.

var word = parent.say()
1

3. 子页面向父页面传参

可以理解为在父页面定义了一个变量, 子页面调用该变量并且给它赋值.

window.parent.id = '123'
1

4. 父页面调用子页面方法

<iframe name="myframe" src="child.html"></iframe>
1

调用方法:

myframe.window.functionName()
1

# 使用 video.js 时, iframe 内嵌视频无法全屏的问题 (opens new window)

为 iframe 添加 allowfullscreen 属性即可, 如下所示

<iframe
  src="video.html"
  frameborder="0"
  width="100%"
  height="100%"
  scrolling="no"
  allowfullscreen="true"
  webkitallowfullscreen="true"
  mozallowfullscreen="true"
></iframe>
1
2
3
4
5
6
7
8
9
10
编辑 (opens new window)
#Js
上次更新: 5/27/2023, 1:02:05 PM
如何实现一个深拷贝
在 js 中更好地使用数组

← 如何实现一个深拷贝 在 js 中更好地使用数组→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式