URL'm var:, sayfanın yenilenmesine neden olmadan http://example.com#something
nasıl kaldırabilirim #something
?
Aşağıdaki çözümü denedim:
window.location.hash = '';
Ancak bu, karma sembolünü #
URL'den kaldırmaz .
URL'm var:, sayfanın yenilenmesine neden olmadan http://example.com#something
nasıl kaldırabilirim #something
?
Aşağıdaki çözümü denedim:
window.location.hash = '';
Ancak bu, karma sembolünü #
URL'den kaldırmaz .
Yanıtlar:
İlk Soru:
window.location.href.substr(0, window.location.href.indexOf('#'))
veya
window.location.href.split('#')[0]
her ikisi de URL'yi karma veya arkasından herhangi bir şey olmadan döndürür.
Düzenlemenizle ilgili olarak:
Yapılacak herhangi bir değişiklik window.location
sayfanın yenilenmesini tetikler. window.location.hash
Yenilemeyi tetiklemeden değiştirebilirsiniz (karınız sayfadaki bir kimlikle eşleşirse pencere atlar), ancak karma işaretinden kurtulamazsınız. Daha da kötüsü olan seçiminizi yapın ...
EN GÜNCEL CEVAP
Ödün vermeden nasıl yapılacağına dair doğru cevap (tam yeniden yükleme veya karma işaretini orada bırakma) burada . Bu yanıtı 2009'da orijinal olanla ilgili olarak bırakarak, yeni tarayıcı API'larından yararlanan doğru cevap 1,5 yıl sonra verildi.
Bu sorunu çözmek günümüzde çok daha ulaşılabilir durumda. HTML5 Tarih API bize cari etki alanı içindeki herhangi bir URL görüntülemek için konum çubuğunu değiştirmenize olanak verir.
function removeHash () {
history.pushState("", document.title, window.location.pathname
+ window.location.search);
}
Çalışma demosu: http://jsfiddle.net/AndyE/ycmPt/show/
Bu, Chrome 9, Firefox 4, Safari 5, Opera 11.50 ve IE 10'da çalışır. Desteklenmeyen tarayıcılar için, mümkün olan her yerde kullanan zarif bir şekilde aşağılayıcı bir komut dosyası yazabilirsiniz:
function removeHash () {
var scrollV, scrollH, loc = window.location;
if ("pushState" in history)
history.pushState("", document.title, loc.pathname + loc.search);
else {
// Prevent scrolling by storing the page's current scroll offset
scrollV = document.body.scrollTop;
scrollH = document.body.scrollLeft;
loc.hash = "";
// Restore the scroll offset, should be flicker free
document.body.scrollTop = scrollV;
document.body.scrollLeft = scrollH;
}
}
Böylece, henüz tüm tarayıcılarda değil, karma sembolünden kurtulabilirsiniz.
Not: tarayıcı geçmişinde Geçerli sayfayı değiştirmek istiyorsanız, kullanmak replaceState()
yerine pushState()
.
(Çok fazla cevap gereksiz ve modası geçmiş.) Şimdi en iyi çözüm şudur:
history.replaceState(null, null, ' ');
history.pushState(null, null, ' ')
Eğer geçmişini korumak istiyorsanız bunun yerine.
null
için state
ve title
sonuçta yok parametreler.
Basit ve zarif:
history.replaceState({}, document.title, "."); // replace / with . to keep url
.
yerine kullanmak için @vahanpwns notuyla ilgili yanıtı güncelleyin /
. Kullanarak /
URL kök yolunu değiştirir.
history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
kullanım durumum için değiştirdim .
history.replaceState(null, document.title, location.pathname + location.search);
Karma kaldırmak için bu işlevi kullanmayı deneyebilirsiniz
function remove_hash_from_url()
{
var uri = window.location.toString();
if (uri.indexOf("#") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("#"));
window.history.replaceState({}, document.title, clean_uri);
}
}
Bu, sondaki karmayı da kaldıracaktır. örneğin: http://test.com/123#abc -> http://test.com/123
if(window.history.pushState) {
window.history.pushState('', '/', window.location.pathname)
} else {
window.location.hash = '';
}
Aşağıdakilere ne dersiniz?
window.location.hash=' '
Lütfen karmayı boş bir dizeye değil, tek bir boşluğa ayarladığımı unutmayın.
Karmanın geçersiz bir bağlantıya ayarlanması da yenilemeye neden olmaz. Gibi,
window.location.hash='invalidtag'
Ancak, yukarıdaki çözümü yanıltıcı buluyorum. Bu, belirli bir konumda olmasa da, verilen konumda verilen adla bir çapa olduğunu gösterir. Aynı zamanda, boş bir dize kullanmak sayfanın en üste gitmesine neden olur ve bu da bazen kabul edilemez. Boşluk kullanılması, URL'nin her kopyalanıp yer imi ve ziyaret edildiğinde sayfanın genellikle en üstte olmasını ve boşluğun yok sayılmasını sağlar.
Hey, bu StackOverflow'daki ilk cevabım. Umarım birisi yararlı bulur ve topluluk standartlarına uygundur.
const url = new URL(window.location);
url.hash = '';
history.replaceState(null, document.title, url);
<script type="text/javascript">
var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("?"));
window.history.replaceState({}, document.title, clean_uri);
}
</script>
bu kodu baş bölümüne koy
function removeLocationHash(){
var noHashURL = window.location.href.replace(/#.*$/, '');
window.history.replaceState('', document.title, noHashURL)
}
window.addEventListener("load", function(){
removeLocationHash();
});
Bence daha güvenli olurdu
if (window.history) {
window.history.pushState('', document.title, window.location.href.replace(window.location.hash, ''));
} else {
window.location.hash = '';
}
Takip etmeyi dene:
window.history.back(1);
Href kullanarak konumu değiştirmek ve kaydırma yapmadan karmayı temizlemek için başka bir çözüm.
Sihirli çözüm burada açıklanmaktadır . Özellikleri burada .
const hash = window.location.hash;
history.scrollRestoration = 'manual';
window.location.href = hash;
history.pushState('', document.title, window.location.pathname);
NOT: Önerilen API artık WhatWG HTML Living Standard'ın bir parçasıdır
$(window).on('hashchange', function (e) {
history.replaceState("", document.title, e.originalEvent.oldURL);
});
Karma değerini null ile değiştirebilirsiniz
var urlWithoutHash = document.location.href.replace(location.hash , "" );