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
This commit is contained in:
Dusan Bartos 2013-08-21 14:54:54 +02:00 committed by Jeff Cross
parent 74ae3edf86
commit eefcdad013
2 changed files with 34 additions and 4 deletions

View file

@ -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),

View file

@ -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);
});
});
});
});