Angular 5 window.postmessage

时间:2018-11-10 04:31:05

标签: angular iframe postmessage

我正在使用Springboot api后端在Angular 6中开发一个应用程序。我目前正在处理要加载iframe的应用程序。在子文档中,当我单击按钮时,当有一个提交按钮时,在该子文档响应后,我需要从该API获取响应,然后在子文档中调用一个API。有人有建议吗?

下面是我在打字稿中的组成部分。如果需要,我可以包含其他代码,但我不知道这是必需的。

Here is the Code.............

import { Component, OnInit, ViewChild, HostListener, ElementRef } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Component({
  selector: 'app-auth-exception',
  templateUrl: './auth-exception.component.html',
  styleUrls: ['./auth-exception.component.css']
})
export class AuthExceptionComponent implements OnInit {


  constructor() {

    if (window.addEventListener) {
      window.addEventListener('message', this.receiveMessage.bind(this), false);
    } else {
      (<any>window).attachEvent('onmessage', this.receiveMessage.bind(this));
    }
  }

  ngOnInit() {
    window.addEventListener('message', () => {
      this.receiveMessage();
   }, false);
  }

  setEventListener() {
    const eventMethod = window.addEventListener ? 'addEventListener' : 'attachEvent';
    const eventer = window[eventMethod];
    console.log('eventer=' + eventer);
    const messageEvent = eventMethod === 'attachEvent' ? 'onmessage' : 'message';
    console.log(messageEvent + '---' + eventMethod);
    eventer(messageEvent, this.receiveMessage, false);
  }


  receiveMessage: any = (event: any) =>  {
    const origin = event.origin || event.originalEvent.origin;
    if (origin === '') {
      if (event.data !== null && typeof event.data === 'object') {
        console.log('Data' + event.data['']);
      } else {
        const RefObject = JSON.parse(event.data);
        console.log(RefObject);
        this.RefValue = RefObject.value;
      }
    }
  }

}

1 个答案:

答案 0 :(得分:2)

您可以使用HostListener

@HostListener('window:message', ['$event']) onPostMessage(event) {
    // here your code
}