HTML5 - Messaggistica web

La messaggistica Web è la capacità di inviare messaggi in tempo reale dal server al browser del client. Ignora il problema di comunicazione tra domini in diversi domini, protocolli o porte

Ad esempio, se desideri inviare i dati dalla tua pagina a un contenitore di annunci che si trova in iframe o voice-versa, in questo scenario, il browser genera un'eccezione di sicurezza. Con la messaggistica web possiamo trasmettere i dati come un evento di messaggio.

Evento messaggio

Gli eventi dei messaggi vengono attivati ​​Messaggistica tra documenti, messaggistica di canale, eventi inviati dal server e web sockets.it ha descritto dall'interfaccia Message Event.

Attributi

Sr.No. Attributi e descrizione
1

data

Contiene dati di stringa

2

origin

Contiene il nome di dominio e la porta

3

lastEventId

Contiene un identificatore univoco per l'evento del messaggio corrente.

4

source

Contiene un riferimento alla finestra del documento di origine

5

ports

Contiene i dati inviati da qualsiasi porta di messaggi

Invio di un messaggio di documenti incrociati

Prima di inviare un messaggio di documenti incrociati, dobbiamo creare un nuovo contesto di navigazione web creando un nuovo iframe o una nuova finestra. Possiamo inviare i dati usando postMessage () e ha due argomenti. Sono come ...

  • message - Il messaggio da inviare
  • targetOrigin - Nome di origine

Esempi

Invio messaggio da iframe a pulsante

var iframe = document.querySelector('iframe');
var button = document.querySelector('button');

var clickHandler = function() {
   iframe.contentWindow.postMessage('The message to send.',
      'https://www.tutorialspoint.com);
}
button.addEventListener('click',clickHandler,false);

Ricezione di un messaggio di documenti incrociati nel documento ricevente

var messageEventHandler = function(event){
   
   // check that the origin is one we want.
   if(event.origin == 'https://www.tutorialspoint.com') {
      alert(event.data);
   }
}
window.addEventListener('message', messageEventHandler,false);

Messaggi di canale

La comunicazione bidirezionale tra i contesti di navigazione è chiamata messaggistica di canale. È utile per la comunicazione tra più origini.

Gli oggetti MessageChannel e MessagePort

Durante la creazione di messageChannel, crea internamente due porte per inviare i dati e inoltrarli a un altro contesto di navigazione.

  • postMessage() - Pubblica il canale di lancio del messaggio

  • start() - Invia i dati

  • close() - Chiude le porte

In questo scenario, inviamo i dati da un iframe a un altro iframe. Qui stiamo invocando i dati in funzione e passando i dati a DOM.

var loadHandler = function() {
   var mc, portMessageHandler;
   mc = new MessageChannel();
   window.parent.postMessage('documentAHasLoaded','http://foo.example',[mc.port2]);
   
   portMessageHandler = function(portMsgEvent) {
      alert( portMsgEvent.data );
   }
   
   mc.port1.addEventListener('message', portMessageHandler, false);
   mc.port1.start();
}
window.addEventListener('DOMContentLoaded', loadHandler, false);

Sopra il codice, sta prendendo i dati dalla porta 2, ora passerà i dati al secondo iframe

var loadHandler = function() {
   var iframes, messageHandler;
   iframes = window.frames;
   
   messageHandler = function(messageEvent) {
      
      if( messageEvent.ports.length > 0 ) {
         
         // transfer the port to iframe[1]
         iframes[1].postMessage('portopen','http://foo.example',messageEvent.ports);
      }
   }
   window.addEventListener('message',messageHandler,false);
}
window.addEventListener('DOMContentLoaded',loadHandler,false);

Ora il secondo documento gestisce i dati utilizzando la funzione portMsgHandler.

var loadHandler() {
   
   // Define our message handler function
   var messageHandler = function(messageEvent) {
   
      // Our form submission handler
      
      var formHandler = function() {
         var msg = 'add <[email protected]> to game circle.';
         messageEvent.ports[0].postMessage(msg);
      }
      document.forms[0].addEventListener('submit',formHandler,false);
   }
   window.addEventListener('message',messageHandler,false);
}
window.addEventListener('DOMContentLoaded',loadHandler,false);