keywords: iframe子窗口调用方法父窗口调用方法javascript前端
窗口示意图.png

背景介绍

项目中首页存在一个菜单,然后可以打开对应的页面,利用iframe的标签加载子页面来显示,这样子就形成了父窗口和子窗口的关系

场景一

父窗口需要执行某个子窗口页面的javascript的方法

每一个子窗口都是iframe,所以这个标签元素是具有name属性的,它就是每个子页面的名字,可以用来定位到哪个子页面

  1. <iframe name="son" src="xxx.com"></iframe>
  2. // 这个子页面有个方法 sonDo【这个必须是全局的】,需要父页面调用的

在父页面直接调用上面的子窗口的方法

  1. // 父页面下面执行
  2. window.son.sonDo();

场景二

子窗口执行父窗口或者顶级窗口的javascript方法

  1. // 父页面
  2. function fatherDo(){
  3. // 执行某些事
  4. };
  5. // 子页面执行
  6. parent.fatherDo(); // parent是父级窗口
  7. top.fatherDo(); // top是顶级的窗口

场景三

子窗口弹窗到父窗口整个页面,为了视觉上面体验更好,然后该弹窗的功能里面还是调用回子窗口的编写的代码功能,这样子就是方便代码的维护,子页面的方法依旧在子页面上

子窗口弹窗的内容的方法需要定制一下:
1-弹窗内容的方法需要带上自身iframe的名字,可使用window.name来获取;
2-方法是全局的;

例子:

  1. /**
  2. * 下面全是子页面的代码
  3. * 使用layer弹窗插件示范
  4. */
  5. // 子页面的弹窗,弹至到父级窗口
  6. function sonDo() {
  7. console.log("来自子页面,在父窗口点击事件调用子窗口的方法");
  8. }
  9. top.layer.open({
  10. type:1,
  11. content:`<span onclick="${window.name}.sonDo(;">`
  12. })

微信公众号:1芒果Mango
qrcode_for_gh_0e7f620a68c0_258.jpg