UNPKG

angular-post-message

Version:

Allow angularJS to listen and publish cross-document messages though window.postMessage API.

68 lines (61 loc) 1.77 kB
(function() { 'use strict'; var app; app = angular.module("ngPostMessage", ['ng']); app.run([ '$window', '$postMessage', '$rootScope', function($window, $postMessage, $rootScope) { $rootScope.$on('$messageOutgoing', function(event, message, domain) { var sender; if (domain == null) { domain = "*"; } sender = $rootScope.sender || $window.parent; return sender.postMessage(message, domain); }); angular.element($window).bind('message', function(event) { var error, response; event = event.originalEvent || event; if (event && event.data) { response = null; $rootScope.sender = event.source; try { response = angular.fromJson(event.data); } catch (_error) { response = {}; response.text = event.data; } response.origin = event.origin; $rootScope.$root.$broadcast('$messageIncoming', response); return $postMessage.messages(response); } }); } ]); app.factory("$postMessage", [ '$rootScope', function($rootScope) { var $messages, api; $messages = []; api = { messages: function(_message_) { if (_message_) { $messages.push(_message_); $rootScope.$digest(); } return $messages; }, lastMessage: function() { return $messages[$messages.length - 1]; }, post: function(message, domain) { if (!domain) { domain = "*"; } return $rootScope.$broadcast('$messageOutgoing', message, domain); } }; return api; } ]); }).call(this);