fix($browser.setUrl): make browser.setUrl more efficient

- browser should remember the last value retrieved via browser.getUrl
- browser should update window.location only if the new value is
  different from the current window.location value
This commit is contained in:
Igor Minar 2011-05-27 20:49:57 -07:00
parent fe5240732d
commit 120701b9d9

View file

@ -39,7 +39,8 @@ function Browser(window, document, body, XHR, $log) {
var self = this, var self = this,
rawDocument = document[0], rawDocument = document[0],
location = window.location, location = window.location,
setTimeout = window.setTimeout; setTimeout = window.setTimeout,
lastLocationUrl;
self.isMock = false; self.isMock = false;
@ -201,10 +202,13 @@ function Browser(window, document, body, XHR, $log) {
* Sets browser's url * Sets browser's url
*/ */
self.setUrl = function(url) { self.setUrl = function(url) {
var existingURL = location.href;
var existingURL = lastLocationUrl;
if (!existingURL.match(/#/)) existingURL += '#'; if (!existingURL.match(/#/)) existingURL += '#';
if (!url.match(/#/)) url += '#'; if (!url.match(/#/)) url += '#';
location.href = url; if (existingURL != url) {
location.href = url;
}
}; };
/** /**
@ -219,7 +223,7 @@ function Browser(window, document, body, XHR, $log) {
* @returns {string} Browser's url * @returns {string} Browser's url
*/ */
self.getUrl = function() { self.getUrl = function() {
return location.href; return lastLocationUrl = location.href;
}; };