iframe页面方法调用时调用父级页面的方法

1.我做了个打印页面的组件,引用的html文件,需要在打印页面的点击打印时调接口,所以需要将方法再次传回给上级。

父级页面使用监听

在mounted和beforeDestroy也就是页面渲染后和页面销毁前增加监听事件的创建与销毁

<template>
  <div>
    <a-modal
      v-model="visible"
      centered
      title="打印预览"
      width="90%"
      :maskClosable="false"
      :footer="false"
      :confirm-loading="loading"
      @cancel="cancel">
      <iframe
        v-if="visible"
        src="/print.html"
        width="100%"
        :height="scrollY + 'px'"></iframe>
    </a-modal>
  </div>
</template>
  <script>
  export default {
    data() {
      return {
        visible: false,
        loading: false,
        printData: null,
        printJson: null,
        scrollY: 0,
        channel: null
      }
    },
    created() {
      this.channel = new BroadcastChannel('zhht_print_channel')
      this.scrollY = document.documentElement.clientHeight - 140
    },
    methods: {
      com() {
        this.channel.postMessage({
          printData: this.printData,
          printJson: this.printJson
        })
      },
      ok() {},
      cancel() {
        sessionStorage.removeItem('nowPrintTemplate')
        this.visible = false
      },
      handleMessage(event) {  
        if (event.data.action === 'printCount') {
          this.$emit('printCountAdd', this.printData)
        }  
      }  
    },
    mounted() {  
      window.addEventListener('message', this.handleMessage) // 添加事件监听  
    },  
    beforeDestroy() {  
      window.removeEventListener('message', this.handleMessage) // 组件销毁前移除事件监听  
    }  
  }
  </script>
  <style scoped></style>
  

在引用的页面调用方法时使用

window.parent.postMessage({ action: 'printCount' }, '*')

layer.open()是一种常用于弹出层窗口的JavaScript插件。当我们在某个弹出层中需要调用父级页面,并且关闭当前弹出层,可以使用一些方法来实现。 首先,我们可以使用layer.open()中的success回调函数,通过获取父级页面的索引来实现调用父级页面。在弹出层中调用父级页面方法或者修改父级页面的内容,可以使用layer.getChildFrame()方法获取到弹出层中Iframe的索引,然后使用parent.layer对象来操作父级页面。 接下来,我们需要关闭当前弹出层。可以使用layer.close()方法来关闭指定层,即将当前弹出层的索引作为参数传递给layer.close()方法即可。 综上所述,实现layer.open()调用父级并关闭当前的具体步骤如下: 1. 在layer.open()中使用success回调函数,在该回调函数中通过parent.layer.getChildFrame()获取弹出层中的Iframe索引。 例如: layer.open({ ... success: function(layero, index) { // 获取弹出层中的Iframe索引 var iframeIndex = parent.layer.getChildFrame('iframe的选择器', index); // 调用父级页面方法 parent.layer.method(); // 修改父级页面内容 parent.layer.$('.class').html('新内容'); // 关闭当前弹出层 parent.layer.close(index); }, ... }); 2. 在success回调函数中使用parent.layer.close(index)关闭当前弹出层。其中,index为当前弹出层的索引。 通过以上步骤,我们可以实现在layer.open()调用父级并关闭当前弹出层的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值