Фрагменты 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