From 7b739c97028be2a5d5aef679ef1f8064cd10d386 Mon Sep 17 00:00:00 2001 From: Vojta Jina Date: Mon, 14 May 2012 14:14:52 -0700 Subject: [PATCH] fix($sniffer): report history false on Android < 4 Android has history.pushState, but it does not update the location correctly: http://code.google.com/p/android/issues/detail?id=17471 Closes #904 --- src/ng/sniffer.js | 9 +++++++-- test/ng/anchorScrollSpec.js | 3 ++- test/ng/logSpec.js | 2 +- test/ng/snifferSpec.js | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/ng/sniffer.js b/src/ng/sniffer.js index b19e7ccf4832..0b116e27743e 100644 --- a/src/ng/sniffer.js +++ b/src/ng/sniffer.js @@ -14,10 +14,15 @@ */ function $SnifferProvider() { this.$get = ['$window', function($window) { - var eventSupport = {}; + var eventSupport = {}, + android = int((/android (\d+)/.exec(lowercase($window.navigator.userAgent)) || [])[1]); return { - history: !!($window.history && $window.history.pushState), + // Android has history.pushState, but it does not update location correctly + // so let's not use the history API at all. + // http://code.google.com/p/android/issues/detail?id=17471 + // https://github.com/angular/angular.js/issues/904 + history: !!($window.history && $window.history.pushState && !(android < 4)), hashchange: 'onhashchange' in $window && // IE8 compatible mode lies (!$window.document.documentMode || $window.document.documentMode > 7), diff --git a/test/ng/anchorScrollSpec.js b/test/ng/anchorScrollSpec.js index 7e4b3aa3eb08..ba64d1a5363c 100644 --- a/test/ng/anchorScrollSpec.js +++ b/test/ng/anchorScrollSpec.js @@ -51,7 +51,8 @@ describe('$anchorScroll', function() { elmSpy = {}; $provide.value('$window', { scrollTo: jasmine.createSpy('$window.scrollTo'), - document: document + document: document, + navigator: {} }); })); diff --git a/test/ng/logSpec.js b/test/ng/logSpec.js index 269057a2744b..ce5c4f11a1d1 100644 --- a/test/ng/logSpec.js +++ b/test/ng/logSpec.js @@ -6,7 +6,7 @@ describe('$log', function() { beforeEach(module(function($provide){ - $window = {}; + $window = {navigator: {}}; logger = ''; log = function() { logger+= 'log;'; }; warn = function() { logger+= 'warn;'; }; diff --git a/test/ng/snifferSpec.js b/test/ng/snifferSpec.js index 81a0db5e54fe..a34a19750e11 100644 --- a/test/ng/snifferSpec.js +++ b/test/ng/snifferSpec.js @@ -3,6 +3,7 @@ describe('$sniffer', function() { function sniffer($window) { + $window.navigator = {}; return new $SnifferProvider().$get[1]($window); }