vue判断iframe加载完成

14,785 阅读1分钟

需求描述: 最近,项目中遇到iframe引入页面,并给iframe内部所有元素注册点击事件得需求。

在注册事件之前,首先我们要获取iframe内部元素。跨域问题已被后端老哥解决。

最初的想法: 项目采用VUE,想法是在nextTick钩子里面获取到iframe的内部dom.事实上,在最简单的情况下,也就是iframe内部没有其他iframe元素时可以成功。如果iframe内部嵌套多个iframe,此时并不能注册成功,暂时解决方法就是定时器轮询,功能实现倒是可以,但是作为最终么有办法的方案。

解决方法: 后来找到,iframe自带有load方法,在iframe加载完成后执行的钩子。

多说无益,贴代码

html:
<iframe id="ifra" name="ifra" width="100%" height="500" src="http://xxxxx">
</iframe>
mounted() {
    const self = this
    this.$nextTick(() =>{
    	const iframe = document.querySelector('#ifra')
    	if (iframe.attachEvent) {    
    		iframe.attachEvent("onload", function() {    
    			const iframeNode = window.frames["ifra"].document
    			self.getDom(iframeNode)			
    		});    
    	} else {    
    		iframe.onload = function() {    
    			const iframeNode = window.frames["ifra"].document
    			self.getDom(iframeNode)
    		};    
    	}
    })
}