@@ -125,7 +125,8 @@ function Browser(window, document, $log, $sniffer) {
125
125
126
126
var lastBrowserUrl = location . href ,
127
127
baseElement = document . find ( 'base' ) ,
128
- replacedUrl = null ;
128
+ replacedUrl = null ,
129
+ ignoreHashChange = false ;
129
130
130
131
/**
131
132
* @name ng.$browser#url
@@ -151,9 +152,13 @@ function Browser(window, document, $log, $sniffer) {
151
152
// setter
152
153
if ( url ) {
153
154
if ( lastBrowserUrl == url ) return ;
155
+ ignoreHashChange = true ;
156
+ try {
157
+ // Flag to ignore hashchange events occasionally generated in Android 2.2, 2.3
154
158
lastBrowserUrl = url ;
155
159
if ( $sniffer . history ) {
156
- if ( replace ) history . replaceState ( null , '' , url ) ;
160
+ if ( replace )
161
+ history . replaceState ( null , '' , url ) ;
157
162
else {
158
163
history . pushState ( null , '' , url ) ;
159
164
// Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462
@@ -168,6 +173,9 @@ function Browser(window, document, $log, $sniffer) {
168
173
replacedUrl = null ;
169
174
}
170
175
}
176
+ } finally {
177
+ ignoreHashChange = false ;
178
+ }
171
179
return self ;
172
180
// getter
173
181
} else {
@@ -182,7 +190,7 @@ function Browser(window, document, $log, $sniffer) {
182
190
urlChangeInit = false ;
183
191
184
192
function fireUrlChange ( ) {
185
- if ( lastBrowserUrl == self . url ( ) ) return ;
193
+ if ( lastBrowserUrl == self . url ( ) || ignoreHashChange ) return ;
186
194
187
195
lastBrowserUrl = self . url ( ) ;
188
196
forEach ( urlChangeListeners , function ( listener ) {
0 commit comments