Фрагменты URL и тег BASE

Я использую <base> тег в приложении, чтобы упростить разработку.

Мне известна "особенность", которая возникает, когда якорь является только фрагментом URL, так как в нем маршрутизируются <base> URL + фрагмент.

Что я могу сделать, чтобы обойти это? Я никогда не обижался с window.location или что-нибудь в Javascript, и вместо того, чтобы взломать его на некоторое время, я предполагаю, что кто-то знает о быстром и грязном, или примере.

Можно ли это обойти? Если это так, пожалуйста, сообщите.

(Я ненавижу задавать вопросы, которые предполагают, что не было предпринято никаких попыток, но я искал / читал безрезультатно)

(Также; с использованием jQuery, поэтому приветствуются любые примеры, использующие ванильный Javascript или jQuery).


Решение jQuery, которое я взломал вместе, не уверен, что оно жизнеспособно как постоянное решение, мысли?

$('a').each(function(index){
    if($(this).attr('href').indexOf('#') == 0){
        $(this).attr('href', (window.location.href).replace(/#.*$/, '')
            + $(this).attr('href'));
    }
});

2 ответа

Решение

Итак, я думаю, что теперь я понимаю вопрос.

Это было проверено в Google Chrome и Firefox.

Добавьте этот javascript в конце тела:

base=document.getElementsByTagName("base"); 
base=base[0].href;

links=document.getElementsByTagName('a');

for(index in links){
    if(links[index].href.indexOf(base+"#")==0){
        links[index].href=document.location+links[index].href.slice(links[index].href.indexOf("#"));
    }
}

Не используйте относительные URL. Базовый тег не влияет на URL-адреса, такие как /home или же http://google.com, но это повлияет about/us или же users/12

Другие вопросы по тегам