Skip to content

Commit a9c082b

Browse files
committed
fix($location): don't rewrite hash-fragment links in same document
$location will no longer rewrite hash fragment links in the same document (specified via href="#hash..."). Closes angular#8478
1 parent cf47b29 commit a9c082b

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

src/ng/location.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,13 @@ function $LocationProvider(){
641641
if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
642642
}
643643

644+
var href = elm.attr('href') || elm.attr('xlink:href');
645+
646+
if (href && href.indexOf('#' + hashPrefix) !== 0 && href[0] === '#') {
647+
// Don't rewrite hash-fragment links in the same document.
648+
return;
649+
}
650+
644651
var absHref = elm.prop('href');
645652

646653
if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {

test/ng/locationSpec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,6 +1164,32 @@ describe('$location', function() {
11641164
});
11651165

11661166

1167+
it('should not rewrite when clicking on relative hash fragments', function() {
1168+
configureService('#foo', true, true, true);
1169+
inject(
1170+
initBrowser(),
1171+
initLocation(),
1172+
function($browser) {
1173+
browserTrigger(link, 'click');
1174+
expectNoRewrite($browser);
1175+
}
1176+
);
1177+
});
1178+
1179+
1180+
it('should not rewrite when clicking on relative hash fragments in old browser', function() {
1181+
configureService('#foo', true, false, true);
1182+
inject(
1183+
initBrowser(),
1184+
initLocation(),
1185+
function($browser) {
1186+
browserTrigger(link, 'click');
1187+
expectNoRewrite($browser);
1188+
}
1189+
);
1190+
});
1191+
1192+
11671193
// don't run next tests on IE<9, as browserTrigger does not simulate pressed keys
11681194
if (!msie || msie >= 9) {
11691195

0 commit comments

Comments
 (0)