嵌套的页面——自适应高度与跨越操作DOM
<div id="myIframeId">
<iframe
ref="myIframe"
name="odpIframeName"
:src="iframeUrl"
frameborder="0"
align="middle"
width="100%"
height="100%"
/>
</div>
背景:
frame嵌套的页面:高度默认很小,而且如果不在相同域名,无法访问内部的DOM元素
1.如果设置固定的高度,部分屏幕部分满足需求,这里使用动态获取浏览器屏幕高度的方法设置:这里去除顶栏100px高度,自适应屏幕
autoheight () {
let winHeight = 0
if (window.innerHeight) { winHeight = window.innerHeight } else if ((document.body) && (document.body.clientHeight)) {
winHeight = document.body.clientHeight }
if (document.documentElement && document.documentElement.clientHeight) { winHeight =
document.documentElement.clientHeight }
document.getElementById('myIframeId').style.height = winHeight - 100 + 'px'
}
mounted () {
this.autoheight()
window.onresize = () => {
return (() => {
this.autoheight()
})()
}
}
2.如何操作iframe内部的DOm:
<iframe src ="/index.html" id="ifr1" name="ifr1" scrolling="yes">
<p>Your browser does not support iframes.</p>
</iframe>
var iframe = document.getElementById("iframe1");
var iwindow = iframe.contentWindow;
var idoc = iwindow.document;
console.log("window",iwindow);//获取iframe的window对象
console.log("document",idoc); //获取iframe的document
console.log("html",idoc.documentElement);//获取iframe的html
console.log("head",idoc.head); //获取head
console.log("body",idoc.body); //获取body
更简单的方法:通过name获取
console.log(window.frames['ifr1'].window);
console.dir(document.getElementById("ifr1").contentWindow);
也可以获取父元素的Dom
window.parent 获取上一级的window对象,如果还是iframe则是该iframe的window对象
window.top 获取最顶级容器的window对象,即,就是你打开页面的文档
window.self 返回自身window的引用。可以理解 window===window.self(脑残)
推荐参考:http://caibaojian.com/js-get-iframe.html
<template>
<iframe :src="urlPath" class="iframe" ref="iframe"></iframe>
</template> <script>
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
export default {
name: 'nxframe',
data() {
return {
urlPath: this.getUrlPath() // iframe src 路径
}
},
created() {
NProgress.configure({ showSpinner: false })
},
mounted() {
this.load()
this.resize()
},
watch: {
$route: function() {
this.load()
},
routerPath: function(val) {
// 监听routerPath变化,改变src路径
this.urlPath = this.getUrlPath()
}
},
methods: {
// 显示等待框
show() {
NProgress.start()
},
// 隐藏等待狂
hide() {
NProgress.done()
},
// 加载浏览器窗口变化自适应
resize() {
window.onresize = () => {
this.iframeInit()
}
},
// 加载组件
load() {
this.show()
var flag = true // URL是否包含问号
if (this.$route.query.src.indexOf('?') === -1) {
flag = false
}
var list = []
for (var key in this.$route.query) {
if (key !== 'src' && key !== 'name') {
list.push(`${key}= this.$route.query[key]`)
}
}
list = list.join('&').toString()
if (flag) {
this.$route.query.src = `${this.$route.query.src}${
list.length > 0 ? `&list` : ''
}`
} else {
this.$route.query.src = `${this.$route.query.src}${
list.length > 0 ? `?list` : ''
}`
}
// 超时3s自动隐藏等待狂,加强用户体验
let time = 3
const timeFunc = setInterval(() => {
time--
if (time === 0) {
this.hide()
clearInterval(timeFunc)
}
}, 1000)
this.iframeInit()
},
// iframe窗口初始化
iframeInit() {
const iframe = this.$refs.iframe
const clientHeight = document.documentElement.clientHeight - 200
iframe.style.height = `${clientHeight}px`
if (iframe.attachEvent) {
iframe.attachEvent('onload', () => {
this.hide()
})
} else {
iframe.onload = () => {
this.hide()
}
}
},
getUrlPath: function() {
// 获取 iframe src 路径
let url = window.location.href
url = url.replace('/myiframe', '')
return url
}
}
}
</script> <style lang="scss">
.iframe {
width: 100%;
height: 100%;
border: 0;
overflow: hidden;
box-sizing: border-box;
}
</style>
嵌套的页面——自适应高度与跨越操作DOM的更多相关文章
- RecyclerFullyManagerDemo【ScrollView里嵌套Recycleview的自适应高度功能】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 对于Recyclerview自己的LinearLayoutManager和GridLayoutManager,在版本23.2.0之后 ...
- 解决div嵌套时IE8和FF无法自适应高度
解决div嵌套时IE8和FF无法自适应高度 还是做类似新浪评论回复的时候,将回复的DIV嵌套在一个DIV中,然后点击回复的时候显示子DIV,这是父DIV的高度是会变化的,于是我将父DIV的高度设置为h ...
- iframe 自适应高度、父子页面传值、回调
总结一下最近用iframe遇到的问题与解决办法: 结构:主页面main.html,里面套用iframe.iframe不能出现滚动条,自适应子页面高度.内容多了滚动条是main.html页面的. 1. ...
- iframe内容自适应高度
一直觉得要用JS才能实现iframe高度的自适应,其实CSS也可以,而且实现的更好,只是需要给包裹iframe的DIV设置个高度,然后让irame高度设置成100%就可以自适应了. 完美版Iframe ...
- iframe之间通信问题及iframe自适应高度问题
下面本人来谈谈iframe之间通信问题及iframe自适应高度问题. 1. iframe通信 分为:同域通信 和 跨域通信.所谓同域通信是指 http://localhost/demo/iframe/ ...
- 【转】jquery iframe取得元素与自适应高度
今天没事来总结一下iframe在jquery中怎么操作的,下面我来给各位介绍jquery 获取iframe子/父页面的元素及iframe在jquery高度自适应实现方法,各位朋友可参考. jquery ...
- html之小积累-.-iframe自适应高度
在做系统框架的时候,常常会用到iframe,当需求是iframe不能出现纵向滚动条,需要根据加载页面的高度,一致延伸,但是iframe的高度自适应问题比较麻烦,当时也是纠结了好久. 方案1:当遇到if ...
- 网页制作技巧:iframe自适应高度
转自:http://www.enet.com.cn/article/2012/0620/A20120620126237.shtml 通过Google搜索iframe 自适应高度,结果5W多条,搜索if ...
- iframe跨域自适应高度
思路: 现有主界面main在域a下,被嵌套页面B在域b下,被嵌套页面B又嵌套一个在域a下的中介页面A. 当用户打开浏览器访问mail.html的时候载入B,触发B的onload事件获取其自身高度,然后 ...
随机推荐
- javascript中的Error对象
在javascript中一旦代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个Error对象的实例,然后整个程序就中断在发生错误的地方. Error对象的实例有三个基本的属性: ...
- toast提示信息获取和Monkey笔记
获取toast toast提示信息出现场景:用户输入用户名和密码后,提示的'登录成功', 用之前的定位方法获取不了,需要Uiautomator2来获取 安装node.js (使用 npm 或 node ...
- 利用Python获取cookie的方法,相比java代码简便不少
1.通过urllib库,是python的标准库,不需要另外引入,直接看代码,注意代码的缩进: # coding=UTF-8import cookielibimport urllib2 class Ry ...
- idea中Lombok的Buider构造器模式,getter/setter正确使用方法
public class ApiUser implements Serializable { private Long id; /*** * 用户类型:single,org(organization) ...
- otepad++ 配置 支持jquery、html、css、javascript、php代码提示
官网下载:http://notepad-plus-plus.org/ 获取插件的方法:打开软件,窗口工具栏有有一个问号,点获取插件. 我使用的插件(安装方法都是官方的方法): QuickText.v0 ...
- 【Leetcode_easy】594. Longest Harmonious Subsequence
problem 594. Longest Harmonious Subsequence 最长和谐子序列 题意: 可以对数组进行排序,那么实际上只要找出来相差为1的两个数的总共出现个数就是一个和谐子序列 ...
- OpenLayers 根据坐标动态画多边形
找了一上午,发现都是鼠标点击画框的,那为什么不标明了是 “鼠标”点击 呢? 想实现的功能是数据库检索坐标集合,然后根据分组提取4点坐标,最后把多个多边形形成图层放在地图上. 最后的实现: <!D ...
- 《C语言程序设计》学习笔记(二)
第八章 函数 函数的基本概念 定义:函数由函数名.参数和函数体组成. 函数定义的一般形式: 类型说明符 函数名(形式参数声明) { [说明与定义部分] 语句: } 说明: 1.类型说明符用来说明函数的 ...
- PHP 7 错误处理 Error
前提:PHP 7 改变了大多数错误的报告方式.不同于 PHP 5 的传统错误报告机制,现在大多数错误被作为 Error 异常抛出. try { echo 2 % 0; // 错误: 分母为0 } ca ...
- openstack环境-解决windows虚机重启后比当前时间晚8小时问题
背景: 生产环境下,发现windows虚机每次重启,时间都会倒退到虚机的格林威治时间(+8小时才是北京时间),也就是比当前时间晚8小时.测试发现,windows虚机所用的镜像,缺少了一个os_type ...