前端技术之Iframe1

昨天码了一篇,结果一不小心手贱给关了,没保存,所以今天又补了一篇,下面进入正题。

现在的项目是给中国移动做的一个webapp,主要是加载第三方资源,暂时先用iframe,以后升级再补一篇。

1.加载第三方页面是position:fixed,滑动时会跳动的问题,就是在外面找到里面的元素进行动态赋值:

          var win = document.getElementById('external-frame').contentWindow;            
            win.οnscrοll=function(){
                var top = win.document.body.scrollTop;
                console.log(top)
                $(window.frames["myiframe"].document).find(".aaa").css({
                    top: 300
                })
          }
2.我查了下,window.history.pushState(url,null,url)方法,url必须同源,才能在window.onpopstate事件中检测到。但是现在有想要监听iframe不断加载后,浏览器的后退事件,怎么办呢?这里取个巧:

现在是上边7个tab,点击都会使下面静态的iframe标签的src属性发生变化,浏览器也会记录,但是返回时tab的选中状态是不变的,这是一个bug,代码如下;

点击时传入tab的index,即n

var state = { url:n }
	setTimeout(function(){
		window.history.pushState(state, null, "#" + goUrl);
},500)
点击后退按钮时,进行监听:

window.addEventListener("popstate", function(e) {
		console.log("我监听到了浏览器的返回按钮事件啦");	
		window.history.go(-1);
		var currentUrl = history.state.url;
	    $(".tabs li").eq(currentUrl).addClass("selected").siblings().removeClass("selected")	
}, false);
ok,大部分工作完成了,但是还有个问题,当你只点击一次的时候是无法返回最开始首页的状态的,因为首页是刚刷新页面的时候加载的,并没有发生点击事件,它没有得到n值,它会报这个错

Uncaught TypeError: Cannot read property 'url' of null(…)
所以这样

<iframe  src="main.html" οnlοad="goTop()"  height="100%" frameborder="0" id="external-frame" ></iframe>
function goTop() {
	
    $("body")[0].scrollIntoView();
    var test = window.location.href;
    var state = { url:0 }
    setTimeout(function(){
		window.history.replaceState(state, null, "#" + test);
	},500)
    
}
window.addEventListener("popstate", function(e) {
		console.log("我监听到了浏览器的返回按钮事件啦");	
		var currentUrl = history.state.url;
		if(currentUrl == 0){
			window.history.go(-1);
			$(".tabs li").eq(0).addClass("selected").siblings().removeClass("selected");
		}else{
			window.history.go(-1);
			$(".tabs li").eq(currentUrl).addClass("selected").siblings().removeClass("selected");
		}
}, false);
这样就可以了

总之,iframe bug多多,大家尽量少用。前端的js框架其实就可以做跨域,像vue之类的。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值