From 63bdb08bc3a762b286987bbe0561f188344b3c35 Mon Sep 17 00:00:00 2001 From: Chris Chua Date: Tue, 23 Sep 2014 18:00:37 -0700 Subject: [PATCH] fix($browser): handle async href on url change in <=IE9 Fixes #9235 --- src/ng/browser.js | 6 +++++- test/ng/browserSpecs.js | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/ng/browser.js b/src/ng/browser.js index e769c4535f15..f049a40b5170 100644 --- a/src/ng/browser.js +++ b/src/ng/browser.js @@ -184,6 +184,10 @@ function Browser(window, document, $log, $sniffer) { function fireUrlChange() { newLocation = null; + checkUrlChange(); + } + + function checkUrlChange() { if (lastBrowserUrl == self.url()) return; lastBrowserUrl = self.url(); @@ -239,7 +243,7 @@ function Browser(window, document, $log, $sniffer) { * Needs to be exported to be able to check for changes that have been done in sync, * as hashchange/popstate events fire in async. */ - self.$$checkUrlChange = fireUrlChange; + self.$$checkUrlChange = checkUrlChange; ////////////////////////////////////////////////////////////// // Misc API diff --git a/test/ng/browserSpecs.js b/test/ng/browserSpecs.js index f5a4359625c2..401e40597975 100755 --- a/test/ng/browserSpecs.js +++ b/test/ng/browserSpecs.js @@ -646,6 +646,29 @@ describe('browser', function() { expect($location.path()).toBe('/someTestHash'); }); }); + + }); + + describe('integration test with $rootScope', function() { + + beforeEach(module(function($provide, $locationProvider) { + $provide.value('$browser', browser); + browser.pollFns = []; + })); + + it('should not interfere with legacy browser url replace behavior', function() { + inject(function($rootScope) { + var current = fakeWindow.location.href; + var newUrl = 'notyet'; + sniffer.history = false; + browser.url(newUrl, true); + expect(browser.url()).toBe(newUrl); + $rootScope.$digest(); + expect(browser.url()).toBe(newUrl); + expect(fakeWindow.location.href).toBe(current); + }); + }); + }); });