javascript - tipos - Comunicación asincrónica páginas cruzadas
tipos de comunicacion sincronica (1)
Tengo una página addin.html
. Puede mostrar otro editor
página (que no necesariamente está en el mismo dominio)
popup = window.open("https://localhost:3000/#/posts/editor/", "popup")
Luego, las dos páginas tienen a cada oyente dentro y pueden enviarse datos entre ellos
// listen:
function receiveMessage(event) {
document.getElementById("display").innerHTML = JSON.stringify(event.data);
}
window.addEventListener("message", receiveMessage, false);
// send:
function sendMessage() {
popup.postMessage("data", popup.location.href);
}
editor
es realizado por ui-router
. Inicialmente, resuelve init
antes de cargar la página:
.state(''editor'', {
controller: ''EditorCtrl'',
resolve: { init: [ ... ] },
...
};
app.controller(''EditorCtrl'', [''$scope'', ''init'', function ($scope, init) {
...
}]
Lo que quiero implementar ahora es, cuando addin.html
editor
, envía algunos datos al editor
, e init
necesita resolver estos datos, antes de cargar la página. editor
podría bloquearse antes de recibir los datos de addin.html
.
¿Alguien sabe cómo enmendar los receptores y remitentes (y algo más) para lograr esto?
Puede devolver una promesa personalizada y resolverla cuando lo desee como el siguiente código
.state(''editor'', {
controller: ''EditorCtrl'',
resolve:{
init: function($q){
var deferred = $q.defer();
window.addEventListener("message", function(event){
deferred.resolve(event.data);
}, false);
return deferred.promise;
}
}
});
El controlador espera que el elemento anterior se resuelva por completo antes de la creación de instancias.