diff --git a/src/ng/location.js b/src/ng/location.js index ba3901b2fd67..40d39282e53f 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -69,7 +69,7 @@ function stripFile(url) { return url.substr(0, stripHash(url).lastIndexOf('/') + 1); } -/* return the server only */ +/* return the server only (scheme://host:port) */ function serverBase(url) { return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); } @@ -497,12 +497,12 @@ function $LocationProvider(){ function( $rootScope, $browser, $sniffer, $rootElement) { var $location, LocationMode, - baseHref = $browser.baseHref(), + baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' initialUrl = $browser.url(), appBase; if (html5Mode) { - appBase = baseHref ? serverBase(initialUrl) + baseHref : initialUrl; + appBase = serverBase(initialUrl) + (baseHref || '/'); LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; } else { appBase = stripHash(initialUrl); diff --git a/test/ng/locationSpec.js b/test/ng/locationSpec.js index 2bce3e643647..df8043a31772 100644 --- a/test/ng/locationSpec.js +++ b/test/ng/locationSpec.js @@ -635,6 +635,19 @@ describe('$location', function() { } ); }); + + + it('should set appBase to serverBase if base[href] is missing', function() { + initService(true, '!', true); + inject( + initBrowser('http://domain.com/my/view1#anchor1', ''), + function($rootScope, $location, $browser) { + expect($browser.url()).toBe('http://domain.com/my/view1#anchor1'); + expect($location.path()).toBe('/my/view1'); + expect($location.hash()).toBe('anchor1'); + } + ); + }); });