Angular 2 window.postmessage

后端 未结 3 2139
时光取名叫无心
时光取名叫无心 2020-12-30 06:01

I\'m working on an eCommerce application in Angular 2 with a node and express api backend. I\'m currently working on the social login section where I am using passport-faceb

3条回答
  •  伪装坚强ぢ
    2020-12-30 06:45

    Combining @PierreDuc's .bind(this) technique and @Mikeumus's comment:

    import {Component, OnDestroy, Renderer2} from '@angular/core';
    
    @Component({
      selector: 'my-component',
      templateUrl: './my_component.ng.html',
    })
    export class MyComponent implements OnDestroy {
      stopListening: Function;
    
      constructor(private renderer: Renderer2) {
        this.stopListening =
            renderer.listen('window', 'message', this.handleMessage.bind(this));
      }
    
      handleMessage(event: Event) {
        const message = event as MessageEvent;
    
        // Only trust messages from the below origin.
        if (message.origin !== 'http://example.com:8080') return;
    
        console.log(message.data);
      }
    
      ngOnDestroy() {
        this.stopListening();
      }
    }
    

    You can still directly do this if you prefer:

    this.stopListening =
        renderer.listen('window', 'message', (even: Event) => { ... });
    

    You can test it by commenting out the origin check and writing this in the developer JavaScript console:

    window.postMessage("test message data", "http://localhost:8080")
    

    Update the 2nd arg to be the URL of the page you are currently on. This command makes the page think it received a message from itself.

提交回复
热议问题