1、动态往页面上插入iframe的函数:
getList(){
let container = document.getElementById("xx");
// iframe赋值
container.id = this.$route.params.id;
container.src = "xxx";
document.body.appendChild(container);
}
2、如果页面上有相同的iframe则不生成,没有就插入:
var x = 0;
// 切换iframe的显示:
var ifrs;
ifrs = document.getElementsByTagName("iframe");
if (ifrs.length > 0) {
var i = ifrs.length;
while (i--) {
if (ifrs[i].getAttribute("id") === this.$route.params.id) {
console.log("-------------存在iframe,不生成!--------------");
x = x + 1;
}
}
}
if (x === 0) {
this.getList();
}
3、路由进入或者更新时,切换iframe的显示与隐藏:
// 分别在路由进来之前和页面组件重新加载之前切换iframe
async beforeRouteEnter(to, from, next) {
if (to.params.id) {
// 切换iframe的显示:
var ifrs;
ifrs = document.getElementsByTagName("iframe");
var i = ifrs.length;
if (i >= 1) {
while (i--) {
if (ifrs[i].getAttribute("id") === to.params.id) {
ifrs[i].style.visibility = "visible";
} else {
ifrs[i].style.visibility = "hidden";
}
}
}
if (i < 1) {
next();
}
}
},
async beforeRouteUpdate(to, from, next) {
if (to.params.id) {
var ifrs;
ifrs = document.getElementsByTagName("iframe");
var i = ifrs.length;
if (i >= 1) {
while (i--) {
if (ifrs[i].getAttribute("id") === to.params.id) {
ifrs[i].style.visibility = "visible";
} else {
ifrs[i].style.visibility = "hidden";
}
}
}
if (i < 1) {
next();
}
}
},
// visibility:hiddle 和 display:none 的区别: visibility 会占用空间,而 display 不会占用
4、路由离开当前页时,隐藏所有的 iframe:
// 离开页面前隐藏所有iframe
beforeRouteLeave(to, from, next) {
var ifrs;
ifrs = document.getElementsByTagName("iframe");
var i = ifrs.length;
if (i >= 1) {
while (i--) {
ifrs[i].style.visibility = "hidden";
}
}
if (i < 1) {
next();
}
},
5、关闭页签时销毁页面的 iframe:
export const clearIFrame = (topicId) => {
var ifrs;
ifrs = document.getElementsByTagName("iframe");
if (!ifrs || ifrs.length === 0) {
return
}
for (let i = 0; i < ifrs.length; i++) {
const iframeDom = ifrs[i];
if (iframeDom && ifrs[i].getAttribute("id") == topicId) {
iframeDom.remove(); //我是直接这样移除的,还可以参考以下方法:
// try {
// iframeDom.src = "about:blank"; // 把iframe指向空白页面,这样能够释放大部分内存。
// iframeDom.contentWindow.document.write(""); //清空frame的内容
// iframeDom.contentWindow.document.clear();
// iframeDom.contentWindow.close(); //避免frame内存泄漏
// } catch (e) { }
// document.body.removeChild(iframeDom);
}
}
}
6、提供其他文章仅供参考:
iframe动态创建及释放内存 - zfyouxi - 博客园近期參与一个项目的开发,因为项目是基于浏览器的胖client(RIA)应用程序,页面中大量调用iframe。后期測试发现浏览器内存一直居高不下,并且打开iframe页面越多内存占用越大。在IE系列浏览https://www.cnblogs.com/zfyouxi/p/5111052.html正确释放iframe的方法_shixueli的博客-CSDN博客_释放iframevar panel=mainForm.tabPanel.add({ region : 'center', title : 'xxxxxx', margins : '0 3 3 0', id : id, align : 'center', htm
https://blog.csdn.net/shixueli/article/details/8843793新浪博客js去掉页面中所有的iframe_袁来如此_新浪博客,袁来如此,
http://blog.sina.com.cn/s/blog_85295a390102vpfc.html