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

Commit

Permalink
fix($location): prevent infinite digest error due to IE bug
Browse files Browse the repository at this point in the history
If an app uses HTML5 mode and we open an html5 url on IE8 or 9 which
don't support location href, we use location.replace to reload the page
with the hashbang equivalent of the url but this fails with infinite
digest. This is because location.replace doesn't update location.href
synchronously on IE8 and 9.

Closes #2802, #3305, #1417
  • Loading branch information
Pavel Vasek authored and IgorMinar committed Jul 24, 2013
1 parent d26bffb commit 97abb12
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions src/ng/browser.js
Expand Up @@ -124,7 +124,8 @@ function Browser(window, document, $log, $sniffer) {
//////////////////////////////////////////////////////////////

var lastBrowserUrl = location.href,
baseElement = document.find('base');
baseElement = document.find('base'),
replacedUrl = null;

/**
* @name ng.$browser#url
Expand Down Expand Up @@ -159,14 +160,21 @@ function Browser(window, document, $log, $sniffer) {
baseElement.attr('href', baseElement.attr('href'));
}
} else {
if (replace) location.replace(url);
else location.href = url;
if (replace) {
location.replace(url);
replacedUrl = url;
} else {
location.href = url;
replacedUrl = null;
}
}
return self;
// getter
} else {
// the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
return location.href.replace(/%27/g,"'");
// - the replacedUrl is a workaround for an IE8-9 issue with location.replace method that doesn't update
// location.href synchronously
// - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
return replacedUrl || location.href.replace(/%27/g,"'");
}
};

Expand Down

0 comments on commit 97abb12

Please sign in to comment.