<!DOCTYPE html>
<html>
<head>
<script data-require="jquery@2.1.1" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script data-require="angular.js@1.3.1" data-semver="1.3.1" src="//code.angularjs.org/1.3.1/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="App" ng-controller="parentController">
<h1>Hello Plunker!</h1>
<div>
<input type="text" ng-model="m.newMessage" />
<button type="button" ng-click="submitMessage()">submit</button>
</div>
<a href="" dat-new-window="yo.html" new-window-app-element="#remoteApp" new-window-specs="width=200,height=200">open new window</a>
</body>
</html>
var app=angular.module('App', []);
app.directive('datNewWindow', ['$window', '$timeout', function ($window, $timeout) {
return {
restrict: 'EA',
replace: false,
transclude: false,
link: function (scope, elem, attrs) {
var newWindow;
var newWindowScope;
elem.bind('click', function() {
newWindow = $window.open(attrs.datNewWindow, '_blank', attrs.newWindowSpecs);
initializeNewWindow();
});
scope.$on('NEW_WINDOW_DATA_TRANSFER_TO', function(event, data) {
newWindowScope.$broadcast("NEW_WINDOW_DATA_TRANSFER_TO", data);
});
$window.onbeforeunload = function() {
closeNewWindow();
}
scope.$on('$destroy', function() {
closeNewWindow();
if ($window.onbeforeunload) {
delete $window.unbeforeunload;
}
});
function initializeNewWindow() {
var newWindowInjector;
try { newWindowInjector = newWindow.angular.element(attrs.newWindowAppElement).injector(); }
catch(e) { newWindowInjector = false; }
if(newWindowInjector){ // Is page ready?
newWindowScope = newWindowInjector.get('$rootScope');
newWindowScope.$broadcast("NEW_WINDOW_INITIALIZE", scope);
newWindowScope.$broadcast("NEW_WINDOW_DATA_TRANSFER_TO", "Dude");
}
else{
$timeout(initializeNewWindow, 1);
}
}
function closeNewWindow() {
if (newWindow) {
newWindow.close();
}
}
}
};
}]);
app.controller('parentController', ['$scope', function ($scope) {
$scope.m = {
newMessage: null
}
$scope.submitMessage = function () {
$scope.$broadcast("NEW_WINDOW_DATA_TRANSFER_TO", $scope.m.newMessage);
};
}]);
var remoteApp=angular.module('RemoteApp', []);
remoteApp.controller('childController', ['$scope', function ($scope) {
$scope.m = {
message: ""
};
$scope.$on("NEW_WINDOW_DATA_TRANSFER_TO", function (event, data) {
console.log(data);
$scope.$apply(function() {
$scope.m.message = data;
});
});
$scope.$on("NEW_WINDOW_INITIALIZE", function (event, data) {
$scope.$apply(function() {
$scope.m.parentWindowScope = data;
});
});
}]);
/* Styles go here */
<!DOCTYPE html>
<html>
<head>
<script data-require="jquery@2.1.1" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script data-require="angular.js@1.3.1" data-semver="1.3.1" src="//code.angularjs.org/1.3.1/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body id="remoteApp" ng-app="RemoteApp" ng-controller="childController">
<h1>Yo {{m.message}}!</h1>
</body>
</html>