iframe
<iframe id="main" name="main" frameborder="0" width="100%" scrolling="auto" :src="iframeUrl" onload="setIframeHeight()"></iframe>
重置 iframe高度函数
function setIframeHeight () {
//初始不执行
try {
vm.timer;
} catch (e) {
return;
}
var ifm = document.getElementById("main");
ifm.height = 0;
var iframeWin = ifm.contentWindow || ifm.contentDocument.parentWindow;
vm.timer = setInterval(function () { //开启定时器
if (iframeWin.document.body && iframeWin.$ && iframeWin.$("#dpLTE").length > 0) {
var ifmHeight = iframeWin.$("#dpLTE").height(); //iframe高度
//var ifmHeight = iframeWin.document.documentElement.scrollHeight || iframeWin.document.body.scrollHeight; //iframe高度
ifm.height = ifmHeight;
iframeWin.$("body").css("overflow", "hidden"); //超出隐藏
iframeWin.$(".content-fluid").css("padding", "0"); //消除边距
//window.clearInterval(vm.timer); //清除定时器
}
}, 200);
}
避免iframe更改了src后,父页面history.back只能后退iframe而不能使自己后退问题
原因:浏览器的机制如此,在iframe
导航变化后手动点击浏览器的后退按钮也依然只是后退iframe
中的导航。
解决方案一:不要修改iframe.src
,而是删除旧iframe
元素,新建一个iframe
元素并替换它,这样不会产生history
<div id="iframeDiv"></div>
//避免iframe更改了src后,父页面history.back只能后退iframe而不能使自己后退问题
var _html = '<iframe id="main" name="main" frameborder="0" width="100%" scrolling="auto" src="' + url + '" onload="setIframeHeight()"></iframe>';
$('#iframeDiv').html(_html);
解决方案二:通过v-if来控制iframe,让iframe消失且重新加载(vue)
html
<iframe id="main" name="main" ref="iframe" frameborder="0" width="100%" scrolling="auto" v-if="reloadIframe" :src="iframeUrl" @load="setIframeHeight()">
js
methods: {
view: function() {
// 先让iframe销毁
var that = this;
that.reloadIframe = false;
that.$nextTick(function() {
// 赋值地址,再加载
that.iframeUrl = url;
that.reloadIframe = true;
})
}
}
解决方案三:使用document.referrer,可以获取前一页面的URL地址的方法
<a class="btn btn-primary" onclick="back()">返回</a>
function back() { window.location.href = window.document.referrer; }