angular.module('ngIOS9UIWebViewPatch', ['ng']).config(['$provide', function($provide){ 'use strict'; $provide.decorator('$browser', ['$delegate', '$window', function($delegate, $window){ if(isIOS9UIWebView($window.navigator.userAgent)){ return applyIOS9Shim($delegate); } return $delegate; function isIOS9UIWebView(userAgent){ return /(iPhone|iPad|iPod).* OS 9_\d/.test(userAgent) && !/Version\/9\./.test(userAgent); } function applyIOS9Shim(browser){ var pendingLocationUrl = null; var originalUrlFn = browser.url; browser.url = function(){ if(arguments.length){ pendingLocationUrl = arguments[0]; return originalUrlFn.apply(browser, arguments); } return pendingLocationUrl || originalUrlFn.apply(browser, arguments); }; window.addEventListener('popstate', clearPendingLocationUrl, false); window.addEventListener('hashchange', clearPendingLocationUrl, false); function clearPendingLocationUrl(){ pendingLocationUrl = null; } return browser; } }]); }]);