iframe子页面和父页面进行交互

  • 在做项目的时候遇到这样的情况:有时候需要使用iframe来带入别人写好的代码,这个页面甚至和我们没有在一个服务器上,那么如何发生数据交互。
  • iframe加载完毕,需要往父页面传递数据,这个时候很容易遇到获取不到dom的情况,所以我们可以使用自定义事件来解决这个问题

iframe.html页面的代码,普通的js代码

  • 给父级的iframe绑定自定义的 loadComplete 事件,然后放入任何你想要的让父元素执行的地方,比如你想要的iframe加载完毕就执行,那就放到window.onload;如果想要点击某个地方执行,那就放入那个按钮的点击事件里。
  • 同时我们可以定义一个getParams方法,来给父页面传参
    • func 表示 自定义方法名字,比如我们想要父页面执行完毕,来调用我们页面的某个方法
    • data 给父页面传递的参数
 window.onload = function(){
    let myIframe = top.window.document.querySelector('#myIframe');
    myIframe.dispatchEvent(new Event('loadComplete'));
}
function getParams(callback){
    callback({
        func:'testFn',
        data:{
            name:'小明',
            age:18,
        }
    })
}
function testFn(){
    console.log('testFn')
}

父页面的代码,父页面使用vue语法

<iframe src="iframe.html" id="myIframe"  @loadComplete="loadComplete" ></iframe>
methods: {
    loadComplete() {
      let myIframe = document.querySelector("#myIframe");
      let subwin = myIframe.contentWindow;
      subwin.getParams((res) => {
        console.log(res.data);
        let func = res["func"];
        subwin[func]();
      });
    },
},
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容