From eefcdad013b56d5d3a05c0b2137a5860091b2575 Mon Sep 17 00:00:00 2001 From: Dusan Bartos Date: Wed, 21 Aug 2013 14:54:54 +0200 Subject: [PATCH] fix($sniffer): history problems on Boxee box History API not working properly on Boxee box browser (old Webkit) problem similar to the one on Android < 4 --- src/ng/sniffer.js | 12 ++++++++---- test/ng/snifferSpec.js | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/ng/sniffer.js b/src/ng/sniffer.js index 585519b34847..7f26e31226e5 100644 --- a/src/ng/sniffer.js +++ b/src/ng/sniffer.js @@ -19,6 +19,7 @@ function $SnifferProvider() { this.$get = ['$window', '$document', function($window, $document) { var eventSupport = {}, android = int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), + boxee = /Boxee/i.test(($window.navigator || {}).userAgent), document = $document[0] || {}, vendorPrefix, vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/, @@ -42,10 +43,10 @@ function $SnifferProvider() { transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); - + if (android && (!transitions||!animations)) { - transitions = isString(document.body.style.webkitTransition); - animations = isString(document.body.style.webkitAnimation); + transitions = isString(document.body.style.webkitTransition); + animations = isString(document.body.style.webkitAnimation); } } @@ -55,7 +56,10 @@ function $SnifferProvider() { // 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)), + + // older webit browser (533.9) on Boxee box has exactly the same problem as Android has + // so let's not use the history API also + history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), hashchange: 'onhashchange' in $window && // IE8 compatible mode lies (!document.documentMode || document.documentMode > 7), diff --git a/test/ng/snifferSpec.js b/test/ng/snifferSpec.js index 2206a271839a..1bf29f735ec2 100644 --- a/test/ng/snifferSpec.js +++ b/test/ng/snifferSpec.js @@ -316,4 +316,30 @@ describe('$sniffer', function() { }); }); + + + describe('history', function() { + it('should be true on Boxee box with an older version of Webkit', function() { + module(function($provide) { + var doc = { + body : { + style : {} + } + }; + var win = { + history: { + pushState: noop + }, + navigator: { + userAgent: 'boxee (alpha/Darwin 8.7.1 i386 - 0.9.11.5591)' + } + }; + $provide.value('$document', jqLite(doc)); + $provide.value('$window', win); + }); + inject(function($sniffer) { + expect($sniffer.history).toBe(false); + }); + }); + }); });