Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 1beebee

Browse files
committed
chore($sniffer): Remove $sniffer.hashchange
The hashchange event is not supported only in ancient browsers like Android<2.2 and IE<8. Angular never really supported IE7 and in 1.3 where support for IE8 is dropped it makes even less sense to check for hashchange support.
1 parent 74a214c commit 1beebee

File tree

5 files changed

+7
-77
lines changed

5 files changed

+7
-77
lines changed

src/ng/browser.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,7 @@ function Browser(window, document, $log, $sniffer) {
256256
// html5 history api - popstate event
257257
if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange);
258258
// hashchange event
259-
if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange);
260-
// polling
261-
else self.addPollFn(fireUrlChange);
259+
jqLite(window).on('hashchange', fireUrlChange);
262260

263261
urlChangeInit = true;
264262
}

src/ng/sniffer.js

-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
* @requires $document
99
*
1010
* @property {boolean} history Does the browser support html5 history api ?
11-
* @property {boolean} hashchange Does the browser support hashchange event ?
1211
* @property {boolean} transitions Does the browser support CSS transition events ?
1312
* @property {boolean} animations Does the browser support CSS animation events ?
1413
*
@@ -65,9 +64,6 @@ function $SnifferProvider() {
6564
// jshint -W018
6665
history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
6766
// jshint +W018
68-
hashchange: 'onhashchange' in $window &&
69-
// IE8 compatible mode lies
70-
(!documentMode || documentMode > 7),
7167
hasEvent: function(event) {
7268
// IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
7369
// it. In particular the event is not fired when backspace or delete key are pressed or

test/ng/browserSpecs.js

+5-55
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ describe('browser', function() {
100100
beforeEach(function() {
101101
scripts = [];
102102
removedScripts = [];
103-
sniffer = {history: true, hashchange: true};
103+
sniffer = {history: true};
104104
fakeWindow = new MockWindow();
105105
fakeDocument = new MockDocument();
106106

@@ -597,7 +597,7 @@ describe('browser', function() {
597597
var currentHref;
598598

599599
beforeEach(function() {
600-
sniffer = {history: true, hashchange: true};
600+
sniffer = {history: true};
601601
currentHref = fakeWindow.location.href;
602602
});
603603

@@ -683,9 +683,8 @@ describe('browser', function() {
683683
expect(callback).toHaveBeenCalledOnce();
684684
});
685685

686-
it('should forward only popstate event when both history and hashchange supported', function() {
686+
it('should forward only popstate event when history supported', function() {
687687
sniffer.history = true;
688-
sniffer.hashchange = true;
689688
browser.onUrlChange(callback);
690689
fakeWindow.location.href = 'http://server/new';
691690

@@ -697,9 +696,8 @@ describe('browser', function() {
697696
expect(callback).toHaveBeenCalledOnce();
698697
});
699698

700-
it('should forward hashchange event with new url when only hashchange supported', function() {
699+
it('should forward hashchange event with new url when history not supported', function() {
701700
sniffer.history = false;
702-
sniffer.hashchange = true;
703701
browser.onUrlChange(callback);
704702
fakeWindow.location.href = 'http://server/new';
705703

@@ -711,56 +709,8 @@ describe('browser', function() {
711709
expect(callback).toHaveBeenCalledOnce();
712710
});
713711

714-
it('should use polling when neither history nor hashchange supported', function() {
712+
it('should not fire urlChange if changed by browser.url method', function() {
715713
sniffer.history = false;
716-
sniffer.hashchange = false;
717-
browser.onUrlChange(callback);
718-
719-
fakeWindow.location.href = 'http://server.new';
720-
fakeWindow.setTimeout.flush();
721-
expect(callback).toHaveBeenCalledWith('http://server.new', null);
722-
723-
callback.reset();
724-
725-
fakeWindow.fire('popstate');
726-
fakeWindow.fire('hashchange');
727-
expect(callback).not.toHaveBeenCalled();
728-
});
729-
730-
describe('after an initial location change by browser.url method when neither history nor hashchange supported', function() {
731-
beforeEach(function() {
732-
sniffer.history = false;
733-
sniffer.hashchange = false;
734-
browser.url("http://server/#current");
735-
});
736-
737-
it('should fire callback with the correct URL on location change outside of angular', function() {
738-
browser.onUrlChange(callback);
739-
740-
fakeWindow.location.href = 'http://server/#new';
741-
fakeWindow.setTimeout.flush();
742-
expect(callback).toHaveBeenCalledWith('http://server/#new', null);
743-
744-
fakeWindow.fire('popstate');
745-
fakeWindow.fire('hashchange');
746-
expect(callback).toHaveBeenCalledOnce();
747-
});
748-
749-
});
750-
751-
it('should not fire urlChange if changed by browser.url method (polling)', function() {
752-
sniffer.history = false;
753-
sniffer.hashchange = false;
754-
browser.onUrlChange(callback);
755-
browser.url('http://new.com');
756-
757-
fakeWindow.setTimeout.flush();
758-
expect(callback).not.toHaveBeenCalled();
759-
});
760-
761-
it('should not fire urlChange if changed by browser.url method (hashchange)', function() {
762-
sniffer.history = false;
763-
sniffer.hashchange = true;
764714
browser.onUrlChange(callback);
765715
browser.url('http://new.com');
766716

test/ng/locationSpec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ describe('$location', function() {
9090
};
9191
};
9292
$browserProvider.$get = function($document, $window) {
93-
var sniffer = {history: true, hashchange: false};
93+
var sniffer = {history: true};
9494
var logs = {log:[], warn:[], info:[], error:[]};
9595
var fakeLog = {log: function() { logs.log.push(slice.call(arguments)); },
9696
warn: function() { logs.warn.push(slice.call(arguments)); },

test/ng/snifferSpec.js

-14
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,6 @@ describe('$sniffer', function() {
2323
});
2424
});
2525

26-
describe('hashchange', function() {
27-
it('should be true if onhashchange property defined', function() {
28-
expect(sniffer({onhashchange: true}).hashchange).toBe(true);
29-
});
30-
31-
it('should be false if onhashchange property not defined', function() {
32-
expect(sniffer({}).hashchange).toBe(false);
33-
});
34-
35-
it('should be false if documentMode is 7 (IE8 comp mode)', function() {
36-
expect(sniffer({onhashchange: true}, {documentMode: 7}).hashchange).toBe(false);
37-
});
38-
});
39-
4026

4127
describe('hasEvent', function() {
4228
var mockDocument, mockDivElement, $sniffer;

0 commit comments

Comments
 (0)